在JDK5中增加了Lock鎖接口,有ReentrantLock實現類,ReentrantLock鎖稱為可重入鎖, 它功能比synchronized多。
鎖的可重入是指,當一個線程獲得一個對象鎖后,再次請求該對象鎖時是可以獲得該對象的鎖的。
package com.wkcto.lock.reentrant;
/**
* 演示鎖的可重入性
*/
public class Test01 {
public synchronized void sm1(){
System.out.println("同步方法1");
//線程執行sm1()方法,默認this作為鎖對象,在sm1()方法中調用了sm2()方法,注意當前線程還是持有this鎖對象的
//sm2()同步方法默認的鎖對象也是this對象, 要執行sm2()必須先獲得this鎖對象,當前this對象被當前線程持有,可以 再次獲得this對象, 這就是鎖的可重入性. 假設鎖不可重入的話,可能會造成死鎖
sm2();
}
private synchronized void sm2() {
System.out.println("同步方法2");
sm3();
}
private synchronized void sm3() {
System.out.println("同步方法3");
}
public static void main(String[] args) {
Test01 obj = new Test01();
new Thread(new Runnable() {
@Override
public void run() {
obj.sm1();
}
}).start();
}
}