Java™ 教程(高級併發對象)

高級併發對象

到目前爲止,本課程重點關注從一開始就是Java平臺一部分的低級別API,這些API適用於很是基礎的任務,但更高級的任務須要更高級別的構建塊,對於充分利用當今多處理器和多核系統的大規模併發應用程序尤爲如此。html

在本節中,咱們將介紹Java平臺5.0版中引入的一些高級併發功能,大多數這些功能都在新的java.util.concurrent包中實現,Java集合框架中還有新的併發數據結構。java

  • Lock對象支持簡化許多併發應用程序的鎖定語法。
  • 執行器定義用於啓動和管理線程的高級API,java.util.concurrent提供的執行器實現提供適用於大規模應用程序的線程池管理。
  • 併發集合使管理大量數據更容易,而且能夠大大減小同步需求。
  • 原子變量具備最小化同步並有助於避免內存一致性錯誤的功能。
  • ThreadLocalRandom(在JDK 7中)提供從多個線程有效生成僞隨機數。

併發集合

java.util.concurrent包中包括對Java集合框架的大量添加,這些最容易按照提供的集合接口進行分類:segmentfault

  • BlockingQueue定義了先進先出的數據結構,當你嘗試向滿的隊列添加或從空隊列中檢索時,該數據結構會阻塞或超時。
  • ConcurrentMapjava.util.Map的子接口,它定義了有用的原子操做,僅當鍵存在時,這些操做纔會移除或替換鍵值對,或僅在鍵不存在時才添加鍵值對,使這些操做原子化有助於避免同步,ConcurrentMap的標準泛型實現是ConcurrentHashMap,它是HashMap的併發模擬。
  • ConcurrentNavigableMapConcurrentMap的子接口,支持近似匹配,ConcurrentNavigableMap的標準泛型實現是ConcurrentSkipListMap,它是TreeMap的併發模擬。

全部這些集合經過定義將對象添加到集合的操做與訪問或移除該對象的後續操做之間的先發生關係來幫助避免內存一致性錯誤api

併發隨機數

在JDK 7中,java.util.concurrent包含一個方便的類ThreadLocalRandom,用於指望使用來自多個線程或ForkJoinTasks的隨機數的應用程序。數據結構

對於併發訪問,使用ThreadLocalRandom而不是Math.random()能夠減小競爭,並最終提升性能。併發

你須要作的就是調用ThreadLocalRandom.current(),而後調用其中一個方法來檢索隨機數,這是一個例子:oracle

int r = ThreadLocalRandom.current().nextInt(4, 77);

進一步閱讀


上一篇:不可變對象

下一篇:Lock對象

相關文章
相關標籤/搜索