色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>java源碼下載>

java并發(fā)編程LOCK的實(shí)戰(zhàn)源碼

大小:0.5 MB 人氣: 2017-09-27 需要積分:3

  鎖的相關(guān)概念介紹 在前面介紹了Lock的基本使用,這一節(jié)來介紹一下與鎖相關(guān)的幾個(gè)概念。

  1.可重入鎖

  如果鎖具備可重入性,則稱作為可重入鎖。像synchronized和ReentrantLock都是可重入鎖,可重入性在我看來實(shí)際上表明了鎖的分配機(jī)制:基于線程的分配,而不是基于方法調(diào)用的分配。舉個(gè)簡(jiǎn)單的例子,當(dāng)一個(gè)線程執(zhí)行到某個(gè)synchronized方法時(shí),比如說method1,而在method1中會(huì)調(diào)用另外一個(gè)synchronized方法method2,此時(shí)線程不必重新去申請(qǐng)鎖,而是可以直接執(zhí)行方法method2。

  看下面這段代碼就明白了:

  class MyClass { publicsynchronizedvoidmethod1() { method2(); }publicsynchronizedvoidmethod2() { } }

  上述代碼中的兩個(gè)方法method1和method2都用synchronized修飾了,假如某一時(shí)刻,線程A執(zhí)行到了method1,此時(shí)線程A獲取了這個(gè)對(duì)象的鎖,而由于method2也是synchronized方法,假如synchronized不具備可重入性,此時(shí)線程A需要重新申請(qǐng)鎖。但是這就會(huì)造成一個(gè)問題,因?yàn)榫€程A已經(jīng)持有了該對(duì)象的鎖,而又在申請(qǐng)獲取該對(duì)象的鎖,這樣就會(huì)線程A一直等待永遠(yuǎn)不會(huì)獲取到的鎖。

  而由于synchronized和Lock都具備可重入性,所以不會(huì)發(fā)生上述現(xiàn)象。

  2.可中斷鎖

  可中斷鎖:顧名思義,就是可以相應(yīng)中斷的鎖。

  在Java中,synchronized就不是可中斷鎖,而Lock是可中斷鎖。

  如果某一線程A正在執(zhí)行鎖中的代碼,另一線程B正在等待獲取該鎖,可能由于等待時(shí)間過長(zhǎng),線程B不想等待了,想先處理其他事情,我們可以讓它中斷自己或者在別的線程中中斷它,這種就是可中斷鎖。

  在前面演示lockInterruptibly()的用法時(shí)已經(jīng)體現(xiàn)了Lock的可中斷性。

  3.公平鎖

  公平鎖即盡量以請(qǐng)求鎖的順序來獲取鎖。比如同是有多個(gè)線程在等待一個(gè)鎖,當(dāng)這個(gè)鎖被釋放時(shí),等待時(shí)間最久的線程(最先請(qǐng)求的線程)會(huì)獲得該所,這種就是公平鎖。

  非公平鎖即無法保證鎖的獲取是按照請(qǐng)求鎖的順序進(jìn)行的。這樣就可能導(dǎo)致某個(gè)或者一些線程永遠(yuǎn)獲取不到鎖。

  在Java中,synchronized就是非公平鎖,它無法保證等待的線程獲取鎖的順序。

  而對(duì)于ReentrantLock和ReentrantReadWriteLock,它默認(rèn)情況下是非公平鎖,但是可以設(shè)置為公平鎖。

  看一下這2個(gè)類的源代碼就清楚了:

  java并發(fā)編程LOCK的實(shí)戰(zhàn)源碼

  在ReentrantLock中定義了2個(gè)靜態(tài)內(nèi)部類,一個(gè)是NotFairSync,一個(gè)是FairSync,分別用來實(shí)現(xiàn)非公平鎖和公平鎖。

  我們可以在創(chuàng)建ReentrantLock對(duì)象時(shí),通過以下方式來設(shè)置鎖的公平性:

  ReentrantLock lock= newReentrantLock( true);

  如果參數(shù)為true表示為公平鎖,為fasle為非公平鎖。默認(rèn)情況下,如果使用無參構(gòu)造器,則是非公平鎖。

  java并發(fā)編程LOCK的實(shí)戰(zhàn)源碼

  另外在ReentrantLock類中定義了很多方法,比如:

  isFair() //判斷鎖是否是公平鎖

  isLocked() //判斷鎖是否被任何線程獲取了

  isHeldByCurrentThread() //判斷鎖是否被當(dāng)前線程獲取了

  hasQueuedThreads() //判斷是否有線程在等待該鎖

  在ReentrantReadWriteLock中也有類似的方法,同樣也可以設(shè)置為公平鎖和非公平鎖。不過要記住,ReentrantReadWriteLock并未實(shí)現(xiàn)Lock接口,它實(shí)現(xiàn)的是ReadWriteLock接口。

  4.讀寫鎖

  讀寫鎖將對(duì)一個(gè)資源(比如文件)的訪問分成了2個(gè)鎖,一個(gè)讀鎖和一個(gè)寫鎖。

  正因?yàn)橛辛俗x寫鎖,才使得多個(gè)線程之間的讀操作不會(huì)發(fā)生沖突。

  ReadWriteLock就是讀寫鎖,它是一個(gè)接口,ReentrantReadWriteLock實(shí)現(xiàn)了這個(gè)接口。

  可以通過readLock()獲取讀鎖,通過writeLock()獲取寫鎖。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 好男人社区| 小柔的性放荡羞辱日记动漫| 欧美 亚洲 日韩 中文2019 | gv手机在线观看| 久久精品无码成人国产毛| 性欧美videosex18嫩| 国产精品2020观看久久| 日韩精品一区VR观看 | 中文字幕不卡免费高清视频| 国产人A片在线乱码视频| 无遮掩H黄纯肉动漫在线观看星| 抽插嫩B乳无码漫| 色狗综合网| 国产精品A久久777777| 窝窝色资源站| 国产人妻精品无码AV在线五十路 | free乌克兰性xxxxhd| 欧美精品专区免费观看| caoporon超碰在线视频| 秋霞在线观看视频一区二区三区| 99精品免费久久久久久久久日本| 麻豆精品传媒2021网站入口| 99精品成人无码A片观看金桔| 男女啪啪久久精品亚洲A| caoporn 免费视频| 伸进同桌奶罩里摸她胸作文| 国产强奷糟蹋漂亮邻居在线观看| 亚洲色视在线观看视频| 玖玖爱在线播放| H揉捏娇喘乳叫床NP调教视频| 日韩欧美高清一区| 国产亚洲精品线视频在线| 亚洲区视频在线观看| 美女伊人网| 国产AV精品无码免费看| 亚洲AV中文字幕无码久久| 久久国产影院| BL文库好大粗黑强强肉NP| 桃花论坛POWERED2019| 精品综合久久久久久8888| 97精品国产自产在线观看永久|