推廣網(wǎng)站怎么建設(shè)新東方線下培訓(xùn)機構(gòu)官網(wǎng)
第7章 線程池與AQS
java.util.concurrent包中的絕大多數(shù)同步工具,如鎖(locks)和屏障(barriers)等,都基于AbstractQueuedSynchronizer(簡稱AQS)構(gòu)建而成。這個框架提供了一套同步管理的通用機制,如同步狀態(tài)的原子性管理、線程阻塞與解除阻塞,還有線程排隊等。
在JDK1.5引入了java.util.concurrent包,其中包含多個支持中等級別線程并發(fā)的類,如可重入鎖(ReentrantLock)、讀鎖(ReentrantReadWriteLock.ReadLock)、寫鎖(Reentrant-ReadWriteLock.WriteLock)、信號量(Semaphore)、屏障(CyclicBarrier)、Future對象、事件指示器以及傳送隊列等。這些同步類主要有如下功能:
(1)對象內(nèi)部同步狀態(tài)的維護(hù)(如表示鎖的狀態(tài)是已獲取還是已釋放)。
(2)更新和檢查狀態(tài)的操作。而且至少有一個方法會導(dǎo)致調(diào)用線程在同步狀態(tài)被獲取時被阻塞,以及在其他線程改變這個同步狀態(tài)時解除線程的阻塞。
幾乎任何一個知名的同步器都可以用來實現(xiàn)其他形式的同步器。例如,可以用可重入鎖(ReentrantLock)來實現(xiàn)信號量(Semaphore);反之,用信號量也可以實現(xiàn)可重入鎖。但是,這樣做會帶來復(fù)雜性高、開銷過大、不靈活等問題,使其最終只能成為一個二流項目。而使用AQS用戶可以用簡潔的方式定義自己的線程同步器。