廣義上的可重入鎖指的是可重複可遞歸調用的鎖,在外層使用鎖以後,在內層仍然能夠使用,而且不發生死鎖(前提得是同一個對象或者class),這樣的鎖就叫作可重入鎖。ReentrantLock和synchronized都是可重入鎖,下面是一個用synchronized實現的例子:bash
synchronized是JVM內置鎖。ui
可重入性的實現方式是,synchronized會爲每個鎖關聯一個獲取計數器和全部者線程,其餘線程調用會阻塞;若是相同的線程再次調用這個鎖,計數值遞增;退出時,遞減,當計數爲0時,鎖會被釋放,spa
public class ReentrantTest implements Runnable {
public synchronized void get() {
System.out.println(Thread.currentThread().getName());
set();
}
public synchronized void set() {
System.out.println(Thread.currentThread().getName());
}
public void run() {
get();
}
public static void main(String[] args) {
ReentrantTest rt = new ReentrantTest();
for(;;){
new Thread(rt).start();
}
}
}
複製代碼