java.util.concurrent

java.util.concurrent 是在並發編程中很常用的實用工具類。此包包括了幾個小的、已標準化的可擴展框架,以及一些提供有用功能的類,沒有這些類,這些功能會很難實現或實現起來冗長乏味。下面簡要描述主要的組件。另請參閱 locks 和 atomic 包。

執行程式,實現,佇列,計時,同步器,並發,

執行程式

接口Executor 是一個簡單的標準化接口,用於定義類似於執行緒的自定義子系統,包括執行緒池、異步 IO 和輕量級任務框架。根據所使用的具體 Executor 類的不同,可能在新創建的執行緒中,現有的任務執行執行緒中,或者調用 execute() 的執行緒中執行任務,並且可能順序或並發執行。ExecutorService 提供了多個完整的異步任務執行框架。ExecutorService 管理任務的排隊和安排,並允許受控制的關閉。ScheduledExecutorService 子接口添加了對延遲的和定期任務執行的支持。ExecutorService 提供了安排異步執行的方法,可執行由 Callable 表示的任何函式,結果類似於 Runnable。Future 返回函式的結果,允許確定執行是否完成,並提供取消執行的方法。

實現

ThreadPoolExecutor 和 ScheduledThreadPoolExecutor 提供可調的、靈活的執行緒池。Executors 類提供大多數 Executor 的常見類型和配置的工廠方法,以及使用它們的幾種實用工具方法。其他基於 Executor 的實用工具包括具體類 FutureTask,它提供 Future 的常見可擴展實現,以及 ExecutorCompletionService,它有助於協調對異步任務組的處理。

佇列

java.util.concurrent ConcurrentLinkedQueue 類提供了高效的、可伸縮的、執行緒安全的非阻塞 FIFO 佇列。java.util.concurrent 中的五個實現都支持擴展的 BlockingQueue 接口,該接口定義了 put 和 take 的阻塞版本:LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue、PriorityBlockingQueue 和 DelayQueue。這些不同的類覆蓋了生產者-使用者、訊息傳遞、並行任務執行和相關並發設計的大多數常見使用的上下文。

計時

TimeUnit 類為指定和控制基於逾時的操作提供了多重粒度(包括納秒級)。該包中的大多數類除了包含不確定的等待之外,還包含基於逾時的操作。在使用逾時的所有情況中,逾時指定了在表明已逾時前該方法應該等待的最少時間。在逾時發生後,實現會“盡力”檢測逾時。但是,在檢測逾時與逾時之後再次實際執行執行緒之間可能要經過不確定的時間。

同步器

四個類可協助實現常見的專用同步語句。Semaphore 是一個經典的並發工具。CountDownLatch 是一個極其簡單但又極其常用的實用工具,用於在保持給定數目的信號、事件或條件前阻塞執行。CyclicBarrier 是一個可重置的多路同步點,在某些並行編程風格中很有用。Exchanger 允許兩個執行緒在集合點交換對象,它在多流水線設計中是有用的。

並發

除佇列外,此包還提供了幾個設計用於多執行緒上下文中的 Collection 實現:ConcurrentHashMap、CopyOnWriteArrayList 和 CopyOnWriteArraySet。
此包中與某些類一起使用的“Concurrent&rdquo前綴;是一種簡寫,表明與類似的“同步”類有所不同。例如,java.util.Hashtable 和 Collections.synchronizedMap(new HashMap()) 是同步的,但 ConcurrentHashMap 則是“並發的”。並發集合是執行緒安全的,但是不受單個排他鎖定的管理。在 ConcurrentHashMap 這一特定情況下,它可以安全地允許進行任意數目的並發讀取,以及數目可調的並發寫入。需要通過單個鎖定阻止對集合的所有訪問時,“同步”類是很有用的,其代價是較差的可伸縮性。在期望多個執行緒訪問公共集合的其他情況中,通常“並發”版本要更好一些。當集合是未共享的,或者僅保持其他鎖定時集合是可訪問的情況下,非同步集合則要更好一些。
大多數並發 Collection 實現(包括大多數 Queue)與常規的 java.util 約定也不同,因為它們的疊代器提供了弱一致的,而不是快速失敗的遍歷。弱一致的疊代器是執行緒安全的,但是在疊代時沒有必要凍結集合,所以它不一定反映自疊代器創建以來的所有更新。

相關詞條

熱門詞條

聯絡我們