synchronized(this)与synchronized(class)的区别

来源:互联网 发布:淘宝ins是什么意思 编辑:程序博客网 时间:2024/05/17 08:11
  1. 首先this 和class 分别是两把不同的锁,不会存在class被获取,this就要等的现象。
  2. synchronized加在一个类的普通方法上,那么相当于synchronized(this)
  3. 如果synchronized加载一个类的静态方法上,那么相当于synchronized(Class对象)。

伪代码
4. synchronized(this)
- 锁住的是对象,当两个线程使用同一个A的实例a里的同步方法时【如线程1调用a.method1 (),线程2调用a.method2()或者调用a.method1()】,会出现同步的现象,即两个线程里的这两个方法不能同时执行;
- 如果这两个线程分别new了不同的A的实例,然后用不同的实例分别调用method1 ()和method2(),不会出现同步的问题。
5. synchronized(class)
- 锁住的是class,即使不同的线程创建了A类的不同实例,分别调用同步方法,也会存在同步现象,当然用同一个实例调用同步方法,更会出现同步现象。

0 0