"Synchronized方法修饰符的使用及其限制"
需积分: 12 162 浏览量
更新于2024-01-11
收藏 3.33MB PPT 举报
Synchronized是Java中一种用于实现线程同步的关键字。它可以用于修饰方法或者代码块,用来控制多个线程对共享资源的访问。在本篇文章中,我们将重点讨论Synchronized的第二种用法,即在方法的声明中加入synchronized修饰符。
当我们在一个方法的声明中加入synchronized修饰符时,整个方法范围内都会对this对象进行加锁。只有获得this对象的锁标记的线程才能调用这个方法。
那么,我们来看一下哪些方法能够加上synchronized修饰符。首先,静态方法不能加上synchronized修饰符。因为静态方法是属于类而不是对象的,this关键字在静态方法中是指向类本身的,无法对this进行加锁。构造方法也不能加上synchronized修饰符。构造方法在创建对象时调用,而且构造方法是由新创建的对象所调用的,没有多个线程同时调用的情况。抽象方法也不能加上synchronized修饰符。因为抽象方法只是一个方法的声明,具体的实现由子类来完成,而synchronized修饰符只能在方法体中使用。
那么,什么时候应该使用synchronized修饰方法呢?当多个线程需要同时访问某一个共享资源,并且对这个共享资源的访问需要互斥时,我们就可以考虑使用synchronized修饰方法。synchronized修饰方法可以保证在同一时刻只有一个线程可以执行被修饰的方法,其他线程需要等待当前线程执行完毕后才能继续执行。
需要注意的是,synchronized修饰方法会对整个方法进行加锁,也就是说,当一个线程访问了一个被synchronized修饰的方法时,其他线程无法同时访问该方法,但是其他线程可以同时访问其他非synchronized修饰的方法。
另外,需要注意的是,当一个线程访问了一个对象的synchronized修饰的方法时,其他线程对该对象中其他synchronized修饰的方法的访问将被阻塞,即使这些方法是不同的方法。这是由于synchronized锁定的是对象,而不是对应的方法。因此,对于一个对象而言,同一时间只能有一个线程能够访问它的synchronized修饰的方法。
总结一下,Synchronized的第二种用法,即在方法的声明中加入synchronized修饰符,可以实现对共享资源的同步访问,保证在同一时刻只有一个线程可以执行被修饰的方法。需要注意的是,静态方法、构造方法和抽象方法都不能加上synchronized修饰符。另外,synchronized修饰方法是对整个方法进行加锁,而不是对方法中的某个语句块进行加锁,并且对一个对象的synchronized修饰的方法的访问会阻塞其他线程对该对象中其他synchronized修饰方法的访问。
以上就是Synchronized的第二种用法的一些简要介绍和总结。希望能对大家理解synchronized在方法中的使用有所帮助。
2013-04-25 上传
2013-08-21 上传
2014-04-18 上传
2013-03-16 上传
2013-07-20 上传
2009-09-15 上传
无不散席
- 粉丝: 32
- 资源: 2万+
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器