|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個軟體套件 下一個軟體套件 | 框架 無框架 |
請參見:
描述
介面摘要 | |
---|---|
BlockingDeque<E> | 支持兩個附加操作的 Queue ,這兩個操作是:獲取元素時等待雙端佇列變為非空(null);存儲元素時等待雙端佇列中的空間變得可用。 |
BlockingQueue<E> | 支持兩個附加操作的 Queue ,這兩個操作是:獲取元素時等待佇列變為非空(null),以及存儲元素時等待空間變得可用。 |
Callable<V> | 返回結果並且可能拋出異常的任務。 |
CompletionService<V> | 將生產新的非同步任務與使用已完成任務的結果分離開來的服務。 |
ConcurrentMap<K,V> | 提供其他原子 putIfAbsent、remove、replace 方法的 Map 。 |
ConcurrentNavigableMap<K,V> | 支持 NavigableMap 操作,且以遞歸方式支持其可導航子映射的 ConcurrentMap 。 |
Delayed | 一種混合樣式的介面,用來標記那些應該在給定延遲時間之後執行的物件。 |
Executor | 執行已提交的 Runnable 任務的物件。 |
ExecutorService | Executor 提供了管理終止的方法,以及可為追蹤一個或多個非同步任務執行狀況而產生 Future 的方法。 |
Future<V> | Future 表示非同步計算的結果。 |
RejectedExecutionHandler | 無法由 ThreadPoolExecutor 執行的任務的處理程序。 |
RunnableFuture<V> | 作為 Runnable 的 Future 。 |
RunnableScheduledFuture<V> | 作為 Runnable 的 ScheduledFuture 。 |
ScheduledExecutorService | 一個 ExecutorService ,可安排在給定的延遲後運行或定期執行的命令。 |
ScheduledFuture<V> | 一個延遲的、結果可接受的操作,可將其取消。 |
ThreadFactory | 根據需要創建新執行緒的物件。 |
列舉摘要 | |
---|---|
TimeUnit | TimeUnit 表示給定單元粒度的時間段,它提供在這些單元中進行跨單元轉換和執行計時及延遲操作的實用工具方法。 |
異常摘要 | |
---|---|
BrokenBarrierException | 當某個執行緒試圖等待處於斷開狀態的 barrier 時,或者 barrier 進入斷開狀態而執行緒處於等待狀態時,拋出該異常。 |
CancellationException | 如果某項值產生任務(如 FutureTask )的結果因為任務被取消而無法獲取到,則拋出該異常。 |
ExecutionException | 當試圖獲取已通過拋出異常而中止的任務的結果時,拋出此異常。 |
RejectedExecutionException | 當無法執行某個任務時,由 Executor 拋出的異常。 |
TimeoutException | 阻塞操作逾時時,拋出該異常。 |
在共時程式中很常用的實用工具類別。此套件包括了幾個小的、已標準化的可擴展框架,以及一些提供有用功能的類別,沒有這些類別,這些功能會很難實作或實作起來冗長乏味。下面簡要描述主要的元件。另請參閱 locks 和 atomic 套件。
Executor
是一個簡單的標準化介面,用於定義類似於執行緒的自定義子系統,包括執行緒池、非同步 IO 和輕量級任務框架。根據所使用的具體 Executor 類別的不同,可能在新創建的執行緒中,現有的任務執行執行緒中,或者調用 execute() 的執行緒中執行任務,並且可能順序或共時執行。ExecutorService
提供了多個完整的非同步任務執行框架。ExecutorService 管理任務的排隊和安排,並允許受控制的關閉。ScheduledExecutorService
子介面及相關的介面添加了對延遲的和定期任務執行的支持。ExecutorService 提供了安排非同步執行的方法,可執行由 Callable
表示的任何函數,結果類似於 Runnable
。Future
返回函數的結果,允許確定執行是否完成,並提供取消執行的方法。RunnableFuture
是擁有 run 方法的 Future,run 方法執行時將設置其結果。
實作。類別 ThreadPoolExecutor
和 ScheduledThreadPoolExecutor
提供可調的、靈活的執行緒池。Executors
類別提供大多數 Executor 的常見型別和配置的處理器方法,以及使用它們的幾種實用工具方法。其他基於 Executor 的實用工具套件括具體類別 FutureTask
,它提供 Future 的常見可擴展實作,以及 ExecutorCompletionService
,它有助於協調對非同步任務組的處理。
ConcurrentLinkedQueue
類別提供了高效的、可伸縮的、執行緒安全的非阻塞 FIFO 佇列。java.util.concurrent 中的五個實作都支持擴展的 BlockingQueue
介面,該介面定義了 put 和 take 的阻塞版本:LinkedBlockingQueue
、ArrayBlockingQueue
、SynchronousQueue
、PriorityBlockingQueue
和 DelayQueue
。這些不同的類別覆寫了生產者-使用者、訊息傳遞、並行任務執行和相關共時設計的大多數常見使用的上下文。BlockingDeque
介面擴展 BlockingQueue,以支持 FIFO 和 LIFO(基於堆疊(stack)空間)操作。LinkedBlockingDeque
類別提供一個實作。
TimeUnit
類別為指定和控制基於逾時的操作提供了多重粒度(包括納秒級)。該套件中的大多數類別除了包含不確定的等待之外,還包含基於逾時的操作。在使用逾時的所有情況中,逾時指定了在表明已逾時前該方法應該等待的最少時間。在逾時發生後,實作會“盡力”檢測逾時。但是,在檢測逾時與逾時之後再次實際執行執行緒之間可能要經過不確定的時間。接受逾時期參數的所有方法將小於等於 0 的值視為根本不會等待。要「永遠」等待,可以使用 Long.MAX_VALUE 值。
Semaphore
是一個經典的共時工具。CountDownLatch
是一個極其簡單但又極其常用的實用工具,用於在保持給定數目的信號、事件或條件前阻塞執行。CyclicBarrier
是一個可重置的多路同步點,在某些並行程式樣式中很有用。Exchanger
允許兩個執行緒在 collection 點交換物件,它在多串流水線設計中是有用的。
ConcurrentHashMap
、ConcurrentSkipListMap
、ConcurrentSkipListSet
、CopyOnWriteArrayList
和
CopyOnWriteArraySet
。當期望許多執行緒存取一個給定 collection 時,ConcurrentHashMap 通常優於同步的 HashMap,ConcurrentSkipListMap 通常優於同步的 TreeMap。當期望的讀數和遍歷遠遠大於列表的更新數時,CopyOnWriteArrayList 優於同步的 ArrayList。
此套件中與某些類別一起使用的“Concurrent&rdquo前綴;是一種簡寫,表明與類似的“同步”類別有所不同。例如,java.util.Hashtable 和 Collections.synchronizedMap(new HashMap()) 是同步的,但 ConcurrentHashMap
則是“共時的”。共時 collection 是執行緒安全的,但是不受單個排他鎖的管理。在 ConcurrentHashMap 這一特定情況下,它可以安全地允許進行任意數目的共時讀取,以及數目可調的共時寫入。需要通過單個鎖不允許對 collection 的所有存取時,“同步”類別是很有用的,其代價是較差的可伸縮性。在期望多個執行緒存取公共 collection 的其他情況中,通常“共時”版本要更好一些。當 collection 是未共享的,或者僅保持其他鎖時 collection 是可存取的情況下,非同步 collection 則要更好一些。
大多數共時 Collection 實作(包括大多數 Queue)與常規的 java.util 約定也不同,因為它們的迭代器提供了弱一致的,而不是快速失敗的遍歷。弱一致的迭代器是執行緒安全的,但是在迭代時沒有必要凍結 collection,所以它不一定反映自迭代器創建以來的所有更新。
記憶體一致性屬性
Java Language Specification 第 17 章定義了記憶體操作(如共享變數的讀寫)的 happen-before 關係。只有寫入操作 happen-before 讀取操作時,才保證一個執行緒寫入的結果對另一個執行緒的讀取是可視的。synchronized
和 volatile
建構 happen-before 關係,Thread.start()
和 Thread.join()
方法形成 happen-before 關係。尤其是:
synchronized
阻塞或方法退出)happen-before 相同監視器的每個後續鎖(synchronized
阻塞或方法進入)。並且因為 happen-before 關係是可傳遞的,所以解除鎖定之前的執行緒的所有操作 happen-before 鎖定該監視器的任何執行緒後續的所有操作。
volatile
欄位 happen-before 每個後續讀取相同欄位。volatile
欄位的讀取和寫入與進入和退出監視器具有相似的記憶體一致性效果,但不 需要互斥鎖。
start
happen-before 已啟動的執行緒中的任何執行緒。
join
成功返回的任何其他執行緒。
java.util.concurrent
中全部類別的方法及其子包擴展了這些對更高層級別同步的保證。尤其是:
Executor
提交 Runnable
之前的操作 happen-before 其執行開始。同樣適用於向 ExecutorService
提交 Callables
。
Future
表示)所採取的操作 happen-before 通過另一執行緒中 Future.get()
獲取結果後續的操作。
Lock.unlock
、Semaphore.release
和 CountDownLatch.countDown
)之前的操作 happen-before 另一執行緒中相同同步儲存物件成功「獲取」方法(如 Lock.lock
、Semaphore.acquire
、Condition.await
和 CountDownLatch.await
)的後續操作。
Exchanger
成功交換物件的每個執行緒對,每個執行緒中 exchange()
之前的操作 happen-before 另一執行緒中對應 exchange()
後續的操作。
CyclicBarrier.await
之前的操作 happen-before 屏障操作所執行的操作,屏障操作所執行的操作 happen-before 從另一執行緒中對應 await
成功返回的後續操作。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個軟體套件 下一個軟體套件 | 框架 無框架 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。