舉例來說明鎖的可重入性
public class UnReentrant{
Lock lock = new Lock();
public void outer(){
lock.lock();
inner();
lock.unlock();
}
public void inner(){
lock.lock();
//do something
lock.unlock();
}
}
outer 中調用了 inner,outer 先鎖住了 lock,這樣 inner 就不能再獲取 lock。其
實調用 outer 的線程已經獲取了 lock 鎖,但是不能在 inner 中重復利用已經獲取
的鎖資源,這種鎖即稱之為 不可重入可重入就意味着:線程可以進入任何一個它
已經擁有的鎖所同步着的代碼塊。
synchronized、ReentrantLock 都是可重入的鎖,可重入鎖相對來說簡化了並發
編程的開發。