91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

梅河口市| 安龙县| 德钦县| 罗田县| 万山特区| 彰化县| 高邮市| 沂源县| 修水县| 嘉义市| 淮阳县| 宜黄县| 普洱| 兴安县| 环江| 福清市| 阿克陶县| 藁城市| 三明市| 万年县| 龙井市| 桓台县| 获嘉县| 含山县| 舒兰市| 舟曲县| 临朐县| 赤峰市| 镇坪县| 彭泽县| 兴隆县| 乌恰县| 浮梁县| 威宁| 威海市| 鄂尔多斯市| 和硕县| 藁城市| 巴林左旗| 黄浦区| 巴南区|