中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Lock和Synchronizer有什么關系

發布時間:2021-07-30 17:56:09 來源:億速云 閱讀:126 作者:Leah 欄目:互聯網科技

Lock和Synchronizer有什么關系,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

Synchronizer,它是一個根據自身狀態調節線程執行的對象。就是用來協調(多)線程執行的對象。從這個角度講Java的內置鎖就是一種synchronizer,它以互斥的可重入的方式協調/控制線程的執行。

Java的阻塞隊列也是一種synchronizser。

再比如:信號量Semaphore、閉鎖Latch、關卡Barrier都是不同類型的synchronizer。

信號量

Semaphore可以用來控制同時訪問某資源的線程數量。把對這些資源的獲取操作包裝起來,獲取資源前先調用信號量的acquire()申請許可,資源使用使用完畢后通過release()釋放許可。對池化資源的管理一般可用信號量完成。

閉鎖

英文Latch有門閂的意思,門閂就是用來把門關緊不讓出入。在并發編程里也是這個意思,我們用latch這個對象禁止線程的執行,什么時候允許線程通過這個門閂呢?對于CountDownLatch來說,就是計數變為0的時候。對于FutureTask來說就是可以拿到計算結果的時候(當然也可能是計算異常了)。一個應用場景:可以把閉鎖當作一個發令槍,它可以讓線程等到信號后一起運行。

關卡

Barrier中文就是“障礙物、柵欄”的意思,文縐縐的翻譯就是“關卡”。它其實像極了閉鎖,與閉鎖不同的是:閉鎖等待的是事件,而關卡等待的是線程。從API調用的感覺感覺上講,Barrier是在工作線程正兒八經的工作都執行完畢后(取決于業務場景),調用barrier.await()使工作線程阻塞住,直到所有其它工作線程也都完成個各自的任務并都調用了barrier.await(),這個時候關卡就被沖破。這里等待的條件是有足夠的線程調用barrier.await()。而Latch是在工作線程中調用latch.await(),等待閉鎖被開啟來執行。閉鎖是怎樣被開啟的?它是依靠latch.countDown()到0后被開啟的,誰countdown跟哪個線程沒什么直接關系。而barrier.await()是需要實實在在的線程阻塞,這就是為什么說barrier等待的是線程,latch等的是信號。

經常使用關卡到場景是,一個任務分成n個子任務后,等待這n個子任務都完成后再做下一步工作。

CyclicBarrier的構造函數接受一個線程數以及一個關卡被突破后要執行的動作。

Exchanger是另一種關卡,用來為兩個線程交換數據,當然是以線程安全的方式交換。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

修文县| 白河县| 古田县| 松江区| 定襄县| 乌恰县| 房产| 夏津县| 南和县| 于都县| 友谊县| 宁明县| 乌审旗| 祁东县| 温泉县| 大石桥市| 防城港市| 大同县| 灌云县| 江陵县| 石嘴山市| 永兴县| 双峰县| 班戈县| 昌黎县| 龙游县| 徐汇区| 夏津县| 锡林郭勒盟| 孟津县| 闵行区| 榆社县| 酉阳| 长沙县| 文成县| 耒阳市| 扎兰屯市| 阆中市| 嘉祥县| 新晃| 资中县|