java.util.concurrent中文API

來源:互聯網
上載者:User
 

概述   軟體包  類  使用    已淘汰  索引  協助 
JavaTM Platform
Standard Ed. 6
 上一個軟體包   下一個軟體包

 

軟體包 java.util.concurrent

在並發編程中很常用的工具 + 生產力類。

 

請參見:
          描述

 

介面摘要
BlockingDeque<E>

支援兩個附加操作的
Queue,這兩個操作是:擷取元素時等待雙端隊列變為非

空;儲存元素時等待雙端隊列中的空間變得可用。

BlockingQueue<E>

支援兩個附加操作的
Queue,這兩個操作是:擷取元素時等待隊列變為非空,

以及儲存元素時等待空間變得可用。

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 根據需要建立新線程的對象。

 

 

類摘要
AbstractExecutorService 提供
ExecutorService 執行方法的預設實現。
ArrayBlockingQueue<E> 一個由數組支援的有界阻塞隊列。
ConcurrentHashMap<K,V> 支援擷取的完全並發和更新的所期望可調整並發的雜湊表。
ConcurrentLinkedQueue<E> 一個基於連結節點的無界安全執行緒隊列。
ConcurrentSkipListMap<K,V> 可縮放的並發
ConcurrentNavigableMap 實現。
ConcurrentSkipListSet<E>

一個基於
ConcurrentSkipListMap 的可縮放並發

NavigableSet 實現。

CopyOnWriteArrayList<E>

ArrayList 的一個安全執行緒的變體,其中所有可變操作(add、set

等等)都是通過對底層數組進行一次新的複製來實現的。

CopyOnWriteArraySet<E> 對其所有操作使用內部
CopyOnWriteArrayList
Set
CountDownLatch

一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允

許一個或多個線程一直等待。

CyclicBarrier

一個同步輔助類,它允許一組線程互相等待,直到到達某個公用屏障

點 (common barrier point)。

DelayQueue<E extends Delayed>

Delayed 元素的一個無界阻塞隊列,只有在延遲期滿時才能從中提

取元素。

Exchanger<V> 可以在對中對元素進行配對和交換的線程的同步點。
ExecutorCompletionService<V> 使用提供的
Executor 來執行任務的
CompletionService
Executors

此包中所定義的
ExecutorExecutorService

ScheduledExecutorServiceThreadFactory

Callable

類的工廠和實用方法。

FutureTask<V> 可取消的非同步計算。
LinkedBlockingDeque<E> 一個基於已連結節點的、任選範圍的阻塞雙端隊列。
LinkedBlockingQueue<E> 一個基於已連結節點的、範圍任意的
blocking queue。
PriorityBlockingQueue<E>

一個無界阻塞隊列,它使用與類

PriorityQueue 相同的順序規

則,並且提供了阻塞擷取操作。

ScheduledThreadPoolExecutor

ThreadPoolExecutor,它可另行安排在給定的延遲後運行命令,

或者定期執行命令。

Semaphore 一個計數訊號量。
SynchronousQueue<E>

一種阻塞隊列,其中每個插入操作必須等待另一個線程的對應移除操

作 ,反之亦然。

ThreadPoolExecutor

一個
ExecutorService,它使用可能的幾個池線程之一執行每個

提交的任務,通常使用
Executors Factory 方法配置。

ThreadPoolExecutor.AbortPolicy

用於被拒絕任務的處理常式,它將拋出

RejectedExecutionException.

ThreadPoolExecutor.CallerRunsPolicy

用於被拒絕任務的處理常式,它直接在 execute 方法的調用線程中

運行被拒絕的任務;如果執行程式已關閉,則會丟棄該任務。

ThreadPoolExecutor.DiscardOldestPolicy

用於被拒絕任務的處理常式,它放棄最舊的未處理請求,然後重試

execute;如果執行程式已關閉,則會丟棄該任務。

ThreadPoolExecutor.DiscardPolicy 用於被拒絕任務的處理常式,預設情況下它將丟棄被拒絕的任務。

 

 

枚舉摘要
TimeUnit

TimeUnit 表示給定單元粒度的時間段,它提供在這些單元中進行跨單元轉換和執行計時及延遲操作的

工具 + 生產力方法。

 

 

異常摘要
BrokenBarrierException

當某個線程試圖等待處於斷開狀態的 barrier 時,或者 barrier 進入斷開狀態而線

程處於等待狀態時,拋出該異常。

CancellationException

如果某項值產生任務(如
FutureTask)的結果因為任務被取消而無法擷取到,則

拋出該異常。

ExecutionException 當試圖擷取已通過拋出異常而中止的任務的結果時,拋出此異常。
RejectedExecutionException 當無法執行某個任務時,由
Executor 拋出的異常。
TimeoutException 阻塞操作逾時時,拋出該異常。

 

軟體包 java.util.concurrent 的描述

 

在並發編程中很常用的工具 + 生產力類。此包包括了幾個小的、已標準化的可擴充架構,以及一些提供有用功能的類,沒有這些

類,這些功能會很難實現或實現起來冗長乏味。下面簡要描述主要的組件。另請參閱 locks 和 atomic 包。

執行程式
  • 介面

    Executor 是一個簡單的標準化介面,用於定義類似於線程的自訂子系統,包括線程池、非同步 IO 和輕量型工作架構。根

    據所使用的具體 Executor 類的不同,可能在新建立的線程中,現有的任務執行線程中,或者調用 execute() 的線程中

    執行任務,並且可能順序或並發執行。ExecutorService 提供了多個完整的非同步任務執行架構。ExecutorService 管理

    任務的排隊和安排,並允許受控制的關閉。ScheduledExecutorService 子介面及相關的介面添加了對延遲的和定期任

    務執行的支援。ExecutorService 提供了安排非同步執行的方法,可執行由
    Callable 表示的任何函數,結果類似於

    RunnableFuture 返回函數的結果,允許確定執行是否完成,並提供取消執行的方法。RunnableFuture
    是擁有 run

    方法的 Future,run 方法執行時將設定其結果。

     

  • 實現


    ThreadPoolExecutor
    ScheduledThreadPoolExecutor 提供可調的、靈活的線程池。Executors 類提供大多

    數 Executor 的常見類型和配置的Factory 方法,以及使用它們的幾種工具 + 生產力方法。其他基於 Executor 的工具 + 生產力包括具

    體類
    FutureTask,它提供 Future 的常見可擴充實現,以及
    ExecutorCompletionService,它有助於協調對非同步任

    務組的處理。

    隊列

    java.util.concurrent
    ConcurrentLinkedQueue 類提供了高效的、可伸縮的、安全執行緒的非阻塞 FIFO 隊列。

    java.util.concurrent 中的五個實現都支援擴充的
    BlockingQueue 介面,該介面定義了 put 和 take 的阻塞版本:

    LinkedBlockingQueueArrayBlockingQueueSynchronousQueuePriorityBlockingQueue

    DelayQueue。這些不同的類覆蓋了生產者-使用者、訊息傳遞、並行任務執行和相關並發設計的大多數常見使用的上下

    文。BlockingDeque 介面擴充
    BlockingQueue,以支援 FIFO 和 LIFO(基於堆棧)操作。LinkedBlockingDeque

    類提供一個實現。

    計時

    TimeUnit 類為指定和控制基於逾時的操作提供了多重粒度(包括納秒級)。該包中的大多數類除了包含不確定的等待之

    外,還包含基於逾時的操作。在使用逾時的所有情況中,逾時指定了在表明已逾時前該方法應該等待的最少時間。在逾時發

    生後,實現會“儘力”檢測逾時。但是,在檢測逾時與逾時之後再次實際執行線程之間可能要經過不確定的時間。接受逾時

    期參數的所有方法將小於等於 0 的值視為根本不會等待。要“永遠”等待,可以使用 Long.MAX_VALUE 值。

    同步器

    四個類可協助實現常見的專用同步語句。Semaphore 是一個經典的並發工具。CountDownLatch
    是一個極其簡單但又極其

    常用的工具 + 生產力,用於在保持給定數目的訊號、事件或條件前阻塞執行。CyclicBarrier 是一個可重設的多路同步點,在

    某些並行編程風格中很有用。Exchanger 允許兩個線程在 collection 點交換對象,它在多流水線設計中是有用的。

    並發 Collection

    除隊列外,此包還提供了設計用於多線程上下文中的 Collection 實現:ConcurrentHashMap

    ConcurrentSkipListMapConcurrentSkipListSetCopyOnWriteArrayList

    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 關係。尤其是:

    • 線程中的每個操作 happen-before 稍後按程式順序傳入的該線程中的每個操作。
    • 一個解除鎖監視器的(synchronized 阻塞或方法退出)happen-before 相同監視器的每個後續鎖(synchronized 阻塞或方法進入)。並且因為
      happen-before 關係是可傳遞的,所以解除鎖定之前的線程的所有操作 happen-before 鎖定該監視器的任何線程後續的所有操作。
    • 寫入 volatile 欄位 happen-before 每個後續讀取相同欄位。volatile 欄位的讀取和寫入與進入和退出監視器具有相似的記憶體一致性效果,但 需要互斥鎖。
    • 線上程上調用 start happen-before 已啟動的線程中的任何線程。
    • 線程中的所有操作 happen-before 從該線程上的 join 成功返回的任何其他線程。

    java.util.concurrent 中所有類的方法及其子包擴充了這些對更進階別同步的保證。尤其是:

    • 線程中將一個對象放入任何並發 collection 之前的操作 happen-before 從另一線程中的 collection 訪問或移除該元素的後續操作。
    • 線程中向 Executor 提交 Runnable 之前的操作 happen-before 其執行開始。同樣適用於向
      ExecutorService 提交 Callables
    • 非同步計算(由 Future 表示)所採取的操作 happen-before 通過另一線程中 Future.get() 擷取結果後續的操作。
    • “釋放”同步儲存方法(如 Lock.unlockSemaphore.release
      CountDownLatch.countDown
      )之前的操作 happen-before 另一線程中相同同步儲存對象成功“擷取”方法(如
      Lock.lockSemaphore.acquireCondition.await
      CountDownLatch.await)的後續操作。
    • 對於通過 Exchanger 成功交換對象的每個線程對,每個線程中 exchange() 之前的操作
      happen-before
      另一線程中對應 exchange() 後續的操作。
    • 調用 CyclicBarrier.await 之前的操作 happen-before 屏障操作所執行的操作,屏障操作所執行的操作
      happen-before 從另一線程中對應 await 成功返回的後續操作。

     

     

    從以下版本開始:
    1.5

    概述   軟體包  類  使用    已淘汰  索引  協助 
    JavaTM Platform
    Standard Ed. 6
     上一個軟體包   下一個軟體包

     

     

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.