Synchronized总结
2019-12-03 本文已影响0人
_JiangXin
一些原则
- 当两个并发线程访问同一个对象object中的这个synchronized(this)代码块或synchronized方法时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
- 当一个线程访问object的一个synchronized(this)代码块或synchronized方法时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块和非同步方法。
- 尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块和同步方法的访问将被阻塞。
- 以上规则对其它对象锁同样适用.
Synchronized 修饰方法
- 锁普通方法:锁的是当前对象,所有线程同一时刻只有一个能访问该对象的同步方法和代码块,注意是该对象的所有同步方法和代码块,都锁住了
- 锁静态方法:整个类都锁住了,所有线程、所有对象同一时刻只有一个能访问该方法
Synchronized 代码块
- Synchronized(this) : 效果等同于锁普通方法,只是粒度更细了,可以精准控制
- Synchronized(obj):别的方法锁的是this,我锁obj,我的方法跟别的方法间不会同步,提高运行效率
- Synchronized(ClassName.class):锁了这个类的所有对象,所有线程的所有对象到这行代码都要等,像锁静态方法,只是粒度更细