1. JUC 簡介在 Java 5.0 提供了java.util.concurrent(簡稱JUC)包,在此包中增加了在并發(fā)編程中很常用的工具類, 用于定義類似于線程的自定義子系統(tǒng),包括線程池,異步 IO 和輕量級任務(wù)框架;還提供了設(shè)計(jì)用于多線程上下文中 的 Collection 實(shí)現(xiàn)等; JUC包
2.JUC 核心java提供了synchonized關(guān)鍵字實(shí)現(xiàn)悲觀鎖機(jī)制,以求指令原子性,,內(nèi)存可見性,,操作互斥性 但是synchonized鎖機(jī)制會(huì)導(dǎo)致性能下降,控制的顆粒度也粗,所以JUC的核心理念是不通過重量級的synchonized來解決并發(fā)問題 我個(gè)人理解的JUC三大核心是 :
AQS的內(nèi)部隊(duì)列采用的是CLH隊(duì)列鎖模型,CLH隊(duì)列是由一個(gè)一個(gè)結(jié)點(diǎn)(Node)構(gòu)成的,。Node類中有兩個(gè)常量SHARE和EXCLUSIVE,,顧名思義這兩個(gè)常量用于表示這個(gè)結(jié)點(diǎn)支持共享模式還是獨(dú)占模式,共享模式指的是允許多個(gè)線程獲取同一個(gè)鎖而且可能獲取成功,,獨(dú)占模式指的是一個(gè)鎖如果被一個(gè)線程持有,,其他線程必須等待。多個(gè)線程讀取一個(gè)文件可以采用共享模式,,而當(dāng)有一個(gè)線程在寫文件時(shí)不會(huì)允許另一個(gè)線程寫這個(gè)文件,,這就是獨(dú)占模式的應(yīng)用場景。 找的一張AQS隊(duì)列 JUC的各種功能都是通過實(shí)現(xiàn)自定義sync類繼承AQS(AbstractQueuedSynchronizer)類,,sync有公平鎖,,非公平鎖;也可以區(qū)分為獨(dú)占sync,,共享sync,。AQS源碼一半好懂一半晦澀,比如 do{ node.prev = pred = pred.prev; }while(pred.waitStatus >0); 這一段,,我也有過空指針疑問,,還有比如,為什么要倒序喚醒等等,,所以我附上一份個(gè)人覺得比較好的AQS源碼解讀:
|
|