不可重入锁和可重入锁
生活随笔
收集整理的這篇文章主要介紹了
不可重入锁和可重入锁
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
不可重入鎖也叫自旋鎖
指當一個方法調用了鎖之后,如持有本鎖的另一個方法也想執行,將會進入等待。那么想要使用這個方法必須先釋放鎖方可調用
public class Lock{private boolean isLocked = false;public synchronized void lock() throws InterruptedException{while(isLocked){ wait();}isLocked = true;}public synchronized void unlock(){isLocked = false;notify();} }
?
可重入鎖
指同一個線程里,持有此鎖的兩個方法將均會執行,不需要先釋放,但是另一個持有此鎖的線程必須等待鎖釋放后才能使用
java里,可重入鎖,如 synchronized
public class Lock{boolean isLocked = false;Thread lockedBy = null;int lockedCount = 0;public synchronized void lock()throws InterruptedException{Thread thread = Thread.currentThread();while(isLocked && lockedBy != thread){wait();}isLocked = true;lockedCount++;lockedBy = thread;}public synchronized void unlock(){if(Thread.currentThread() == this.lockedBy){lockedCount--;if(lockedCount == 0){isLocked = false;notify();}}} }不可重入鎖例子的話,如下調用
public class Count{Lock lock = new Lock();public void print(){lock.lock();doAdd();lock.unlock();}public void doAdd(){lock.lock();//do something lock.unlock();} }當調用print的時候,由于獲得鎖,導致doAdd使用時陷入while循環而等待,所以需要先將鎖釋放后才可使用
轉載于:https://www.cnblogs.com/fengfenghuifei/p/10509661.html
總結
以上是生活随笔為你收集整理的不可重入锁和可重入锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高效的数据压缩编码方式 Protobuf
- 下一篇: 为指定c 语言源程序添加行号,给自己的程