日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java并發(fā)之Lock接口的深入講解

瀏覽:23日期:2023-12-07 15:24:30
目錄Juc中各種各樣鎖信息synchronized面臨缺點(diǎn)Lock接口Lock最佳實(shí)踐:對(duì)比 Lock和tryLock的區(qū)別總結(jié)Juc中各種各樣鎖信息

在java的juc包為我們提供了各種各樣的鎖信息。如果細(xì)心來(lái)看其大部分都會(huì)實(shí)現(xiàn)一個(gè)名為L(zhǎng)OCK的接口信息本文皆在幫你回顧Lock信息;

通過(guò)本文你將了解到如下內(nèi)容:

1.Lock和synchronized的對(duì)比

2.Lock中常見(jiàn)API的總結(jié)

synchronized面臨缺點(diǎn)

鎖的出現(xiàn)主要是為了保證在并發(fā)訪問(wèn)共享資源時(shí)不出現(xiàn)錯(cuò)。 在java中如果不考慮性能損耗問(wèn)題,那么對(duì)共享的資源信息加上synchrionzed關(guān)鍵字基本就可以解決大多數(shù)并發(fā)帶來(lái)的問(wèn)題,但是也隨之帶來(lái)靈活性和效率上的問(wèn)題:

 效率方面:

1. 此種情況下鎖的釋放情況較少,很容易到導(dǎo)致一直獨(dú)占資源而導(dǎo)致性能的下降。

2. 當(dāng)我們?cè)噲D獲取鎖時(shí)不能直接指定具體條件

3. 不能中斷正在試圖獲得鎖的線程

靈活性:

1. 當(dāng)獲得鎖資源后,無(wú)法得知是否獲得鎖信息

2. 僅當(dāng)程序異?;蝽樌麍?zhí)行完時(shí)才會(huì)釋放鎖信息,缺乏主動(dòng)釋放鎖的時(shí)機(jī)。

不適用的場(chǎng)景

場(chǎng)景1 :

當(dāng)我們使用synchronized時(shí),假如某線程獲取到鎖之后由于要等待IO或者其他原因進(jìn)入阻塞狀態(tài),同時(shí)未釋放鎖信息,那么此時(shí)其他線程就只能一直等待。所以此時(shí)就需要synchronized有一種機(jī)制:避免等待的線程一直無(wú)期限地等待下去。場(chǎng)景2 :

在讀文件信息形式,不同線程的寫(xiě)操作是相互沖突的。但是讀操作并不會(huì)導(dǎo)致沖突。如果我們不加考慮的為資源信息加上synchronized關(guān)鍵字,那么當(dāng)多線程同時(shí)操作時(shí),只有一個(gè)線程可以獲取到資源,其他未獲得鎖信息的線程只能進(jìn)入等待狀態(tài),從而導(dǎo)致讀寫(xiě)效率不高。

Lock接口

Lock接口是對(duì)關(guān)鍵字synchronized的補(bǔ)充和擴(kuò)展,它允許我們可以在線程安全的情況下更加靈活的操作共享資源信息。

常見(jiàn)用法:

java并發(fā)之Lock接口的深入講解

Lock最佳實(shí)踐:

1.lock(),unlock()

一般來(lái)說(shuō),使用Lock必須在try…catch…塊中進(jìn)行,并且將釋放鎖的操作放在finally塊中進(jìn)行。這是因?yàn)閘ock并不會(huì)像synchronized那樣在異常時(shí)釋放鎖,所以必須保證有手動(dòng)釋放的過(guò)程,這樣才能保證其它線程有獲取鎖的機(jī)會(huì)。

// 加鎖lock.lock();try{ //處理任務(wù)}catch(Exception ex){​}finally{ //釋放鎖 (鎖的釋放一般放入到finally塊中進(jìn)行,這樣保證了總會(huì)對(duì)鎖信息進(jìn)行釋放) lock.unlock(); }

2. tryLock() & tryLock(long time, TimeUnit unit)

tryLock()方法是有返回值的,它表示用來(lái)嘗試獲取鎖,如果獲取成功,則返回true;如果獲取失?。存i已被其他線程獲?。?,則返回false,也就是說(shuō),這個(gè)方法無(wú)論如何都會(huì)立即返回即使其無(wú)法獲取到鎖也不會(huì)一致等待。

tryLock(long time, TimeUnit unit)方法和tryLock()方法是類似的,只不過(guò)區(qū)別在于這個(gè)方法在拿不到鎖時(shí)會(huì)等待一定的時(shí)間,在時(shí)間期限之內(nèi)如果還拿不到鎖,就返回false

如果一開(kāi)始拿到鎖或者在等待期間內(nèi)拿到了鎖,則返回true。一般情況下,通過(guò)tryLock來(lái)獲取鎖時(shí)是這樣使用的:

Lock lock = ...;if(lock.tryLock()) { try{ //處理任務(wù) }catch(Exception ex){​ }finally{ lock.unlock(); //釋放鎖 } }else { //如果不能獲取鎖,則直接做其他事情}

3. lockInterruptibly()  

lockInterruptibly()方法比較特殊,當(dāng)通過(guò)這個(gè)方法去獲取鎖時(shí),如果線程 正在等待獲取鎖,則這個(gè)線程能夠 響應(yīng)中斷,即中斷線程的等待狀態(tài)。

例如,當(dāng)兩個(gè)線程同時(shí)通過(guò)lock.lockInterruptibly()想獲取某個(gè)鎖時(shí),假若此時(shí)線程A獲取到了鎖,而線程B只有在等待,那么對(duì)線程B調(diào)用threadB.interrupt()方法能夠中斷線程B的等待過(guò)程。

public void method() throws InterruptedException { lock.lockInterruptibly(); try { //..... } finally {lock.unlock(); } }

當(dāng)一個(gè)線程獲取了鎖之后,是不會(huì)被interrupt()方法中斷的。因?yàn)閕nterrupt()方法只能中斷阻塞過(guò)程中的線程而不能中斷正在運(yùn)行過(guò)程中的線程。而在 synchronized 中,當(dāng)一個(gè)線程處于等待某個(gè)鎖的狀態(tài),是無(wú)法被中斷的,只有一直等待下去,這也就是我們需要手動(dòng)釋放鎖的原因。

給出如下的例子來(lái)進(jìn)行驗(yàn)證:創(chuàng)建兩個(gè)線程來(lái)共同爭(zhēng)搶lock鎖信息

public class LockInterruptibly implements Runnable {​ private Lock lock = new ReentrantLock();public static void main(String[] args) { LockInterruptibly lockInterruptibly = new LockInterruptibly(); Thread thread0 = new Thread(lockInterruptibly); Thread thread1 = new Thread(lockInterruptibly); thread0.start();​ try {Thread.sleep(2000); } catch (InterruptedException e) {e.printStackTrace(); } thread1.start(); thread1.interrupt();} // 任務(wù)執(zhí)行邏輯 @Override public void run() {System.out.println(Thread.currentThread().getName() + '嘗試獲取鎖');try { lock.lockInterruptibly(); try {System.out.println(Thread.currentThread().getName() + '獲取到了鎖');Thread.sleep(5000); } catch (InterruptedException e) {System.out.println(Thread.currentThread().getName() + '睡眠期間被中斷了'); } finally {lock.unlock();System.out.println(Thread.currentThread().getName() + '釋放了鎖'); }} catch (InterruptedException e) { System.out.println(Thread.currentThread().getName() + '獲得鎖期間被中斷了');} }}​

執(zhí)行結(jié)果:

Thread-0嘗試獲取鎖Thread-0獲取到了鎖Thread-1嘗試獲取鎖Thread-1獲得鎖期間被中斷了Thread-0釋放了鎖

通過(guò)結(jié)果信息我們可以看出,lockInterruptibly()僅能中斷正在等待的線程信息,而無(wú)法中斷正在運(yùn)行的線程。

對(duì)比 Lock和tryLock的區(qū)別

lock和tryLock都可以獲取到鎖信息,但兩者之間還是存在些差異的。 具體如下:

1: lock拿不到鎖會(huì)一直等待。tryLock是去嘗試,拿不到就返回false,拿到返回true。

2: tryLock是可以被打斷的,被中斷的,lock是不可以。

// 實(shí)例代碼 public class LockDemo implements Runnable{ static Lock lock1 = new ReentrantLock(); @Override public void run() {// 分別演示 lock,trylock區(qū)別// lock1.lock();lock1.tryLock();System.out.println('線程 ' + Thread.currentThread().getName() + ' 獲取到鎖信息 '); } public static void main(String[] args) throws InterruptedException {LockDemo r1 = new LockDemo();LockDemo r2 = new LockDemo();r1.flag = true;r2.flag = false;Thread t1 = new Thread(r1);Thread t2 = new Thread(r2);​t1.start();Thread.sleep(1000);// 中斷t2.start();t2.interrupt(); }}​

結(jié)果信息:

當(dāng)執(zhí)行l(wèi)ock1.lock()時(shí)的輸出:可以看到lock方法并不能響應(yīng)中斷信息,如果不解鎖則會(huì)一致持有鎖信息!

java并發(fā)之Lock接口的深入講解

對(duì)于tryLock而言其可以響應(yīng)中斷

java并發(fā)之Lock接口的深入講解

總結(jié)

本篇對(duì)Lock接口中常用到的Api進(jìn)行了分析和總結(jié),同時(shí)分析了Lock接口和synchronized關(guān)鍵之間的關(guān)系,希望對(duì)你能有所啟發(fā).

到此這篇關(guān)于java并發(fā)之Lock接口的文章就介紹到這了,更多相關(guān)java并發(fā)Lock接口內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区三区网| 日韩欧美四区| 国产精品观看| 日韩精品免费一区二区夜夜嗨 | 国产精品日韩精品在线播放| 91精品在线免费视频| 欧美一区=区三区| 国产精品视频一区二区三区四蜜臂| 日韩一区二区三区精品视频第3页| 国产麻豆久久| 色婷婷亚洲mv天堂mv在影片| 国产精品13p| 亚洲va中文在线播放免费| 中文日韩欧美| 爽好多水快深点欧美视频| 国产一区二区三区久久 | 国产精品国产一区| 美女视频黄 久久| 99视频精品全国免费| 在线精品视频一区| 日韩精品欧美大片| 国产美女高潮在线| 日韩欧美久久| 欧美激情视频一区二区三区免费| 国产欧美日韩视频在线| 久久精品官网| 四虎国产精品免费久久| 国产美女撒尿一区二区| 99精品99| 蜜桃一区二区三区在线观看| 日韩成人午夜精品| 久久一级电影| 国产另类在线| 好吊日精品视频 | 日韩不卡在线观看日韩不卡视频 | 国产亚洲一卡2卡3卡4卡新区| 免费一级欧美片在线观看网站| 欧美影院三区| 影音先锋久久精品| 国产suv精品一区二区四区视频| 日韩av福利| 日韩高清电影免费| 久久婷婷av| 在线观看一区| 成人台湾亚洲精品一区二区| 中文字幕亚洲影视| 日韩一区亚洲二区| 日韩伦理在线一区| 亚洲欧洲一区二区天堂久久| 精品亚洲a∨一区二区三区18| 视频一区二区国产| 性欧美69xoxoxoxo| 黄色aa久久| 免费精品一区| 亚洲精品字幕| 一区二区三区网站| 久久精品国产亚洲夜色av网站 | 91精品美女| 日本欧美在线看| 久久久久99| 免费成人网www| 免费污视频在线一区| 国产调教精品| 激情五月综合| 亚洲大全视频| 久久中文字幕二区| 日本久久黄色| 91福利精品在线观看| 老牛影视一区二区三区| 亚洲黄色中文字幕| 婷婷视频一区二区三区| 日韩视频免费| 水蜜桃久久夜色精品一区的特点| 久久不见久久见国语| 日韩av不卡在线观看| 蜜芽一区二区三区| 亚洲视频综合| 激情欧美一区二区三区| 在线看片国产福利你懂的| 免费视频久久| 老司机免费视频一区二区| 久久99精品久久久久久园产越南| 国产精品天天看天天狠| 亚洲另类黄色| 精品国产一区二| 日韩一区二区久久| 午夜久久黄色| 最新亚洲国产| 久久一区欧美| 日韩专区欧美专区| 91日韩在线| 国产精品一线天粉嫩av| 国产精品丝袜在线播放| 色爱av综合网| 亚洲乱亚洲高清| 欧美丰满日韩| 91精品xxx在线观看| 一二三区精品| 午夜在线播放视频欧美| 日韩av中文字幕一区二区三区| 老司机免费视频一区二区| 欧美特黄一级大片| 天海翼精品一区二区三区| 伊人成人在线视频| 视频二区不卡| 日韩伦理福利| 欧美黄色网页| 香蕉视频亚洲一级| 久草免费在线视频| 97精品一区| 98精品视频| 国产精品极品| 国产人成精品一区二区三| 日韩二区在线观看| 7m精品国产导航在线| 日本vs亚洲vs韩国一区三区二区| 亚洲精品一区二区妖精| 日韩成人亚洲| 久久激情婷婷| 欧美日韩一区二区三区视频播放| 日本а中文在线天堂| 日韩欧美综合| 成人看片网站| 婷婷国产精品| 在线 亚洲欧美在线综合一区| 亚洲精品123区| 136国产福利精品导航网址| 成人久久久久| 一区二区亚洲精品| 亚洲一区二区三区中文字幕在线观看 | 国产精品网址| 日韩精品社区| 国产免费播放一区二区| 日韩欧美高清一区二区三区| 亚洲精品一二| 一区二区三区国产在线| 亚洲久久一区| 91精品一区| 狠狠色综合网| 午夜视频一区二区在线观看| 日本一区二区三区视频在线看| 视频国产精品| 理论片午夜视频在线观看| 日韩一区欧美二区| 日韩精品欧美| 热久久久久久久| 综合日韩av| 日韩高清成人在线| 亚洲黄色中文字幕| 日本va欧美va精品| 日韩成人免费| 91精品成人| 久久久久久婷| 在线亚洲一区| 电影91久久久| 午夜国产一区二区| 国产精品115| 精品九九在线| 国产+成+人+亚洲欧洲在线| 久久精品福利| 蜜桃成人av| 免费观看久久久4p| 青青草伊人久久| 国产伦久视频在线观看| 亚洲v在线看| 91一区二区三区四区| 国产在线欧美| 日韩高清不卡在线| 免费在线亚洲| 精品在线99| 日本va欧美va精品发布| 动漫av一区| 久久国产成人| 红杏一区二区三区| 99国产成+人+综合+亚洲欧美| 国产精品亚洲一区二区在线观看| 久久精品一区二区三区中文字幕| 91精品婷婷色在线观看| 亚洲精品日本| av资源亚洲| 天堂av一区| 波多野结衣久久精品| 少妇精品久久久一区二区三区| 国产精品久久亚洲不卡| 亚洲a在线视频| 国产精品嫩模av在线| 亚洲精品97| 国产伊人久久| 亚洲有吗中文字幕| 国产精品伦理久久久久久| 六月天综合网| 国产精品高颜值在线观看| 亚洲精品无播放器在线播放| 成人日韩av| 日韩精品欧美精品| 中文亚洲免费| 国产麻豆综合| 麻豆理论在线观看| 亚洲精品中文字幕99999| 日韩精品不卡一区二区|