日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

同步控制 之“重入锁”

發布時間:2025/7/14 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 同步控制 之“重入锁” 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

????我們首先將介紹synchronized、Object.wait()和Object.notify()方法的替代品(或者說是增強版) ——重入鎖。

一、synchronized的功能擴展:重入鎖

????重入鎖可以完全替代synchronized關鍵字。在JDK5.0的早期版本中,重入鎖的性能遠遠好于synchronized,但從JDK6.0開始,JDK在synchronized上做了大量的優化,是的兩者的性能差距并不大。重入鎖使用java.util.concurrent.locks.ReentrantLock類來實現。下面是一段最簡單的重入鎖使用案例:

import java.util.concurrent.locks.ReentrantLock;public class Thread2 implements Runnable{public static ReentrantLock lock = new ReentrantLock();public static int i=0;@Overridepublic void run() {for (int j = 0; j < 1000000; j++) {lock.lock();try {i++;}finally {lock.unlock();}}}public static void main(String[] args) throws InterruptedException {Thread2 rl = new Thread2();//類名Thread t1 = new Thread(rl);Thread t2 = new Thread(rl);t1.start();t2.start();//啟動子線程t1、t2t1.join();t2.join();//結束子線程t1、t2System.out.println(i);} }

????根據以上代碼,使用重入鎖保護臨界區資源i,確保多線程對i操作的安全性。從這段代碼可以看到,與synchronized相比,重入鎖有著顯示的操作過程。開發人員必須手動何時枷鎖,何時釋放鎖。也正因為這樣,重入鎖對邏輯控制的靈活性要遠遠好于synchronized,但值得注意的是,在退出臨界區時,必須記得釋放,否則,其它線程就沒有機會再訪問臨界區了。

for (int j = 0; j < 1000000; j++) {lock.lock();lock.lock();try {i++;}finally {lock.unlock();lock.unlock();} }

????一個線程連續兩次獲得同一把鎖。這是允許的!如果不允許這么操作,那么同一個線程在第2次獲得鎖時,將會和自己產生死鎖。程序就會“卡死”在第2次申請鎖的過程中。需要注意的是,如果同一個線程多次獲得鎖,那么在釋放鎖的時候,也必須釋放相同次數。

  • 釋放鎖的次數多了:會得到一個java.lang.IllegalMonitorStateException異常。
  • 釋放鎖的次數少了:相當于線程還持有這個鎖,因此其它線程也無法進入臨界區。

?

轉載于:https://my.oschina.net/Clarences/blog/1547677

總結

以上是生活随笔為你收集整理的同步控制 之“重入锁”的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。