您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Java可重入鎖與不可重入鎖怎么寫”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java可重入鎖與不可重入鎖怎么寫”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
不可重入鎖
//不可重入鎖public class LockTest {Lock lock=new Lock();public void a() throws InterruptedException {lock.lock(); b();lock.unlock(); }//不可重入 public void b() throws InterruptedException {lock.lock(); //........ lock.unlock(); }public static void main(String[] args) throws InterruptedException {LockTest lockTest=new LockTest();lockTest.a();lockTest.b(); } }class Lock{//是否占用 private boolean flag=false;//使用鎖 public synchronized void lock() throws InterruptedException {while(flag){ wait(); }flag=true; }public synchronized void unlock(){flag=false; notify(); } }
可重入鎖
//可重入鎖public class LockTest {ReLock lock=new ReLock();public void a() throws InterruptedException {lock.lock();System.out.println(lock.getCount()); b();lock.unlock();System.out.println(lock.getCount()); }//不可重入 public void b() throws InterruptedException {lock.lock();System.out.println(lock.getCount()); //........ lock.unlock();System.out.println(lock.getCount()); }public static void main(String[] args) throws InterruptedException {LockTest lockTest=new LockTest();lockTest.a();Thread.sleep(1000);System.out.println(lockTest.lock.getCount()); } }//可重入鎖class ReLock{//是否占用 private boolean flag=false;private Thread LockedBY=null;//存儲線程 private int count=0;//使用鎖 public synchronized void lock() throws InterruptedException {Thread t=Thread.currentThread();while(flag&&LockedBY!=t){ wait(); }flag=true;LockedBY=t;count++; }public synchronized void unlock(){if(Thread.currentThread()==LockedBY){count--;if(count==0){flag=false; notify();LockedBY=null; } } }public int getCount() {return count; } }
讀到這里,這篇“Java可重入鎖與不可重入鎖怎么寫”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。