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

您的位置:首頁技術文章
文章詳情頁

java并發之Lock接口的深入講解

瀏覽:24日期:2023-12-07 15:24:30
目錄Juc中各種各樣鎖信息synchronized面臨缺點Lock接口Lock最佳實踐:對比 Lock和tryLock的區別總結Juc中各種各樣鎖信息

在java的juc包為我們提供了各種各樣的鎖信息。如果細心來看其大部分都會實現一個名為LOCK的接口信息本文皆在幫你回顧Lock信息;

通過本文你將了解到如下內容:

1.Lock和synchronized的對比

2.Lock中常見API的總結

synchronized面臨缺點

鎖的出現主要是為了保證在并發訪問共享資源時不出現錯。 在java中如果不考慮性能損耗問題,那么對共享的資源信息加上synchrionzed關鍵字基本就可以解決大多數并發帶來的問題,但是也隨之帶來靈活性和效率上的問題:

 效率方面:

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

2. 當我們試圖獲取鎖時不能直接指定具體條件

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

靈活性:

1. 當獲得鎖資源后,無法得知是否獲得鎖信息

2. 僅當程序異常或順利執行完時才會釋放鎖信息,缺乏主動釋放鎖的時機。

不適用的場景

場景1 :

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

在讀文件信息形式,不同線程的寫操作是相互沖突的。但是讀操作并不會導致沖突。如果我們不加考慮的為資源信息加上synchronized關鍵字,那么當多線程同時操作時,只有一個線程可以獲取到資源,其他未獲得鎖信息的線程只能進入等待狀態,從而導致讀寫效率不高。

Lock接口

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

常見用法:

java并發之Lock接口的深入講解

Lock最佳實踐:

1.lock(),unlock()

一般來說,使用Lock必須在try…catch…塊中進行,并且將釋放鎖的操作放在finally塊中進行。這是因為lock并不會像synchronized那樣在異常時釋放鎖,所以必須保證有手動釋放的過程,這樣才能保證其它線程有獲取鎖的機會。

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

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

tryLock()方法是有返回值的,它表示用來嘗試獲取鎖,如果獲取成功,則返回true;如果獲取失敗(即鎖已被其他線程獲取),則返回false,也就是說,這個方法無論如何都會立即返回即使其無法獲取到鎖也不會一致等待。

tryLock(long time, TimeUnit unit)方法和tryLock()方法是類似的,只不過區別在于這個方法在拿不到鎖時會等待一定的時間,在時間期限之內如果還拿不到鎖,就返回false

如果一開始拿到鎖或者在等待期間內拿到了鎖,則返回true。一般情況下,通過tryLock來獲取鎖時是這樣使用的:

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

3. lockInterruptibly()  

lockInterruptibly()方法比較特殊,當通過這個方法去獲取鎖時,如果線程 正在等待獲取鎖,則這個線程能夠 響應中斷,即中斷線程的等待狀態。

例如,當兩個線程同時通過lock.lockInterruptibly()想獲取某個鎖時,假若此時線程A獲取到了鎖,而線程B只有在等待,那么對線程B調用threadB.interrupt()方法能夠中斷線程B的等待過程。

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

當一個線程獲取了鎖之后,是不會被interrupt()方法中斷的。因為interrupt()方法只能中斷阻塞過程中的線程而不能中斷正在運行過程中的線程。而在 synchronized 中,當一個線程處于等待某個鎖的狀態,是無法被中斷的,只有一直等待下去,這也就是我們需要手動釋放鎖的原因。

給出如下的例子來進行驗證:創建兩個線程來共同爭搶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();} // 任務執行邏輯 @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() + '獲得鎖期間被中斷了');} }}​

執行結果:

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

通過結果信息我們可以看出,lockInterruptibly()僅能中斷正在等待的線程信息,而無法中斷正在運行的線程。

對比 Lock和tryLock的區別

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

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

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

// 實例代碼 public class LockDemo implements Runnable{ static Lock lock1 = new ReentrantLock(); @Override public void run() {// 分別演示 lock,trylock區別// 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(); }}​

結果信息:

當執行lock1.lock()時的輸出:可以看到lock方法并不能響應中斷信息,如果不解鎖則會一致持有鎖信息!

java并發之Lock接口的深入講解

對于tryLock而言其可以響應中斷

java并發之Lock接口的深入講解

總結

本篇對Lock接口中常用到的Api進行了分析和總結,同時分析了Lock接口和synchronized關鍵之間的關系,希望對你能有所啟發.

到此這篇關于java并發之Lock接口的文章就介紹到這了,更多相關java并發Lock接口內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲欧美高清| 国产精品一区二区三区av| 欧美69视频| 精品一区视频| 99久久久久| 国产日韩在线观看视频| 国产欧美日韩一区二区三区在线| 国产精品99精品一区二区三区∴| 日韩精品一二三| 亚洲精品亚洲人成在线观看| 中文一区一区三区免费在线观| 久久成人国产| 丝袜诱惑制服诱惑色一区在线观看 | 日韩影院二区| 91亚洲国产高清| 青青久久av| 香蕉国产精品| 蜜臀国产一区二区三区在线播放 | 国产欧美一区二区三区国产幕精品| 国产亚洲欧美日韩在线观看一区二区 | 午夜在线观看免费一区| 免费视频最近日韩| 亚洲三级国产| 欧美久久精品| 岛国av在线播放| 91久久在线| 日本免费在线视频不卡一不卡二| 国产精品qvod| 亚洲成人一区在线观看| 久久国产99| 国产区精品区| 亚州欧美在线| 精品欧美日韩精品| 久久国产中文字幕| 日韩在线a电影| 国产麻豆一区二区三区精品视频| 超碰超碰人人人人精品| 亚洲精品护士| 亚洲国产专区校园欧美| 中文在线а√天堂| 91福利精品在线观看| 日韩精品一区二区三区中文| 欧美日韩在线二区| 美女国产精品久久久| 国产亚洲精品精品国产亚洲综合| 久久久亚洲一区| 日韩精品视频中文字幕| 精品国产aⅴ| 成人污污视频| 日韩欧美字幕| 91精品亚洲| 久久高清一区| 精品视频一区二区三区四区五区 | 欧美日韩国产观看视频| 国产精品丝袜xxxxxxx| 欧美日韩少妇| 亚洲va中文在线播放免费| 日韩电影免费在线观看| 特黄毛片在线观看| 日韩精品永久网址| 亚洲福利专区| 久久天堂精品| 桃色av一区二区| 日本精品在线播放| 精品国产a一区二区三区v免费| 国产精品久久久一区二区| 少妇精品在线| 亚洲第一区色| 最新亚洲国产| 国产精品jk白丝蜜臀av小说| 成人久久一区| 夜夜精品视频| 久久超级碰碰| 免费视频国产一区| 亚洲深深色噜噜狠狠爱网站| 日韩精品a在线观看91| 男女男精品网站| 麻豆成人91精品二区三区| 九九久久国产| 丝袜a∨在线一区二区三区不卡| 久久精品国产亚洲一区二区三区| 影音国产精品| 国产999精品在线观看| 亚洲精品日本| 亚洲爱爱视频| 国产一区国产二区国产三区| 日本v片在线高清不卡在线观看| 日本麻豆一区二区三区视频| 91视频一区| 久久精品欧洲| 日韩国产91| 天堂av在线| 中文字幕av一区二区三区人| 国产福利亚洲| 国产婷婷精品| 天堂网在线观看国产精品| 国产精品99视频| 天堂va欧美ⅴa亚洲va一国产| 欧美伊人影院| 午夜欧美精品| 99久久久久久中文字幕一区| 精品国产成人| 蜜桃一区二区三区在线观看| 福利视频一区| 久久狠狠久久| 欧美国产另类| 日本伊人午夜精品| 欧美性感美女一区二区| 国产欧美一级| 日韩高清不卡| 黄色不卡一区| 日韩一区二区三区免费播放| 日韩av午夜在线观看| 亚洲美洲欧洲综合国产一区| 久久久亚洲一区| 国产在线观看www| 精品一区av| 日韩av二区在线播放| 亚洲涩涩av| 亚洲乱亚洲高清| 亚州av一区| 国产传媒在线观看| 91久久亚洲| 久久精品国内一区二区三区水蜜桃| 视频一区在线播放| 久久精品免费一区二区三区 | 免费在线播放第一区高清av| 九色精品91| 九九久久电影| 婷婷亚洲综合| 免费成人在线视频观看| 日韩精品免费一区二区夜夜嗨| 伊人久久婷婷| 日本大胆欧美人术艺术动态| 亚洲精品一级二级三级| 国产欧美另类| 麻豆久久久久久久| 美腿丝袜亚洲三区| 亚洲欧美高清| 中文字幕av一区二区三区人| 91精品精品| 综合激情网站| 免费视频一区二区三区在线观看| 韩日一区二区| 成人日韩在线观看| 日韩av影院| 免播放器亚洲| 亚洲日本久久| 国产精品亚洲四区在线观看| 久久免费精品| 久久精品国内一区二区三区水蜜桃| 国产96在线亚洲| 国产精品伦理久久久久久| 免费在线小视频| 亚洲激情久久| 日韩精品免费一区二区夜夜嗨| 日韩av中文在线观看| 精品国产欧美日韩| 视频在线观看91| 国产精品va视频| 最新国产拍偷乱拍精品| 久久国产精品免费精品3p | 国产资源在线观看入口av| 亚洲精品伊人| 99视频精品| 国产在线观看www| 91亚洲国产成人久久精品| 久久99青青| 国内揄拍国内精品久久| 成人在线视频免费| 国产中文欧美日韩在线| 国产欧美一区二区精品久久久| 欧美精品国产| 黄色精品视频| 久久精品国产免费| 欧美日一区二区在线观看| 免费人成精品欧美精品| 9色精品在线| 免费不卡在线视频| 亚洲色图国产| 亚洲欧美日韩国产一区二区| 六月婷婷一区| 日韩欧美在线精品| 婷婷精品在线| 国产一区精品福利| 欧美~级网站不卡| 免费日本视频一区| 国产一卡不卡| 日韩电影免费网址| 噜噜噜躁狠狠躁狠狠精品视频| 蜜桃av一区二区| 日本午夜精品久久久| 国产精品伦理久久久久久| 欧美中文一区二区| 亚洲三级网站| 久久99精品久久久野外观看| 国产中文欧美日韩在线| 不卡在线一区二区| 日韩中文字幕麻豆| 在线看片国产福利你懂的|