多執行緒隨筆 2

2021-10-06 03:28:46 字數 888 閱讀 7160

與wait()的區別:

wait需要讓已經獲取鎖的執行緒釋放鎖並阻塞,而locksupport不需要

wait指定喚醒某個執行緒更麻煩,而locksupport更便捷

notify(notify不釋放鎖)不可呼叫在wait之前,而unpark可以呼叫在park之前

// 讓當前執行緒阻塞

locksupport.

park()

;// 喚醒某個執行緒

locksupport.

unpark

(t);

locksupport.part()是基於unsafe.part()實現的(unsafe提供了硬體級別的原子操作)

aqs使用了模板設計模式

aqs的核心是state,state使用volatile保持可見性

aqs內部存在乙個阻塞佇列(雙向鍊錶),每當獲取鎖時都會從該佇列中進行非公平奪取

先看一下泳道圖(其中不包括執行緒佇列)

多執行緒隨筆

很久沒有更新blog了,太忙了,都沒時間來整理一下知識點,年底了有點時間了,可以好好整理以前寫的專案 了,順便把常用的業務方法都封裝成通用的方法,以便以後使用到能快速完成。切入主題,封裝了乙個常用的多執行緒使用場景的類庫,提供兩種模式,跟大家分享。很多時候,我們會遇到這種情況,事件a和事件b毫無關係...

多執行緒隨筆 1

cas v,expected,newvalue v 當前值 expected 期望值 newvalue 新值 當v等於e時,將n賦予v,否則進行自旋操作 在進行cas時,有執行緒更改了v,之後又更改回來,讓程式以為沒發生改變 設立版本號,在cas時加上版本號比較,atmic包中存在版本號的類 loc...

多執行緒 18 多執行緒題2

現成程式中的test類中的 在不斷地產生資料,然後交給testdo.dosome 方法去處理,就好像生產者在不斷地產生資料,消費者在不斷消費資料。請將程式改造成有10個執行緒來消費生成者產生的資料,這些消費者都呼叫testdo.dosome 方法去進行處理,故每個消費者都需要一秒才能處理完,但要保證...