可重入锁,synchronized和ReentrantLock都是可重入锁,当一个线程执行到某个synchronized方法时,好比说method1,而在method1中会调用另一个synchronized方法method2,此时线程没必要从新去申请锁,而是能够直接执行方法method2。由于如以前所说syncchronized所拿到的是调用该方法的对象的锁是this锁,即MyClass类的对象,因此调用method2不须要从新得到锁。假如synchronized不具有可重入性,此时线程A须要从新申请锁。可是这就会形成一个问题,由于线程A已经持有了该对象的锁,而又在申请获取该对象的锁,这样就会线程A一直等待永远不会获取到的锁。 class MyClass {
public synchronized void method1() {
method2();
}
public synchronized void method2() {
}
}