并发编程:synchronized的理解
- 用synchronized修饰方法:如果该对象中有多个同步方法,则当一个线程获执行对象中的一个synchronized方法,则该对象中其它同步方法也不允许别的线程执行
public synchronized void method(){}
等同于
public void method() { synchronized (this) { //.. } }
- 同步代码块
当没有明确的对象作为锁,只是想让一段代码同步时,能够创建一个特别的instance变量(他得是个对象)来充当锁
private byte[] lock = new byte[0]; public void method() { synchronized(lock) { //.. } }
- 用synchronized修饰static方法:方法获得的是所属的类的类锁
class Foo { public synchronized static void method1() {} public void method2() { synchronized(Foo.class) { //.. }
}
}
- 注意:在使用synchronized块来同步方法时,非静态方法可以通过this来同步,而静态方法必须使用class对象来同步,但是非静态方法也可以通过使用class来同步静态方法。但是静态方法中不能使用this来同步非静态方法。这点在使用synchronized块需要注意。
- Java的synchronized块是可重入的:重入锁死

浙公网安备 33010602011771号