日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

同步控制 之“重入锁”

發(fā)布時(shí)間:2025/7/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 同步控制 之“重入锁” 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

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

一、synchronized的功能擴(kuò)展:重入鎖

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

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();//啟動(dòng)子線程t1、t2t1.join();t2.join();//結(jié)束子線程t1、t2System.out.println(i);} }

????根據(jù)以上代碼,使用重入鎖保護(hù)臨界區(qū)資源i,確保多線程對(duì)i操作的安全性。從這段代碼可以看到,與synchronized相比,重入鎖有著顯示的操作過程。開發(fā)人員必須手動(dòng)何時(shí)枷鎖,何時(shí)釋放鎖。也正因?yàn)檫@樣,重入鎖對(duì)邏輯控制的靈活性要遠(yuǎn)遠(yuǎn)好于synchronized,但值得注意的是,在退出臨界區(qū)時(shí),必須記得釋放,否則,其它線程就沒有機(jī)會(huì)再訪問臨界區(qū)了。

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

????一個(gè)線程連續(xù)兩次獲得同一把鎖。這是允許的!如果不允許這么操作,那么同一個(gè)線程在第2次獲得鎖時(shí),將會(huì)和自己產(chǎn)生死鎖。程序就會(huì)“卡死”在第2次申請(qǐng)鎖的過程中。需要注意的是,如果同一個(gè)線程多次獲得鎖,那么在釋放鎖的時(shí)候,也必須釋放相同次數(shù)。

  • 釋放鎖的次數(shù)多了:會(huì)得到一個(gè)java.lang.IllegalMonitorStateException異常。
  • 釋放鎖的次數(shù)少了:相當(dāng)于線程還持有這個(gè)鎖,因此其它線程也無法進(jìn)入臨界區(qū)。

?

轉(zhuǎn)載于:https://my.oschina.net/Clarences/blog/1547677

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。