浏覽以下內容前,請點擊並閱讀 聲明
java.util.concurrent包包含了許多對於java集合框架的補充,根據提供的接口可以將這些集合分為以下幾類:
所有的這些集合可以通過在添加對象到集合的動作和後續的訪問和移除動作間建立發生前關系幫助避免內存一致性錯誤。
java.util.concurrent.atomic包定義了支持對於一個變量進行原子操作的類,其中所有的類都含有讀和寫的set和get方法,如同讀寫volatile變量一樣,也就是說,對於同一個變量對應的set方法和接下來的get方法具有發生前關系。原子方法compareAndSet也具有這些內存一致性特征,就像對於整型原子變量使用的原子算數方法一樣。原子變量使用方法如下例:
import java.util.concurrent.atomic.AtomicInteger;
class AtomicCounter {
//定義原子字段
private AtomicInteger c = new AtomicInteger(0);
public void increment() {
c.incrementAndGet();
}
public void decrement() {
c.decrementAndGet();
}
//返回基本類型
public int value() {
return c.get();
}
}
JDK7中,java.util.concurrent包含一個方便的類,ThreadLocalRandom,因為有些程序希望在多個線程或者ForkJoinTask中使用隨機數字,對於並發的訪問,使用ThreadLocalRandom相對於Math.random()可以減少資源爭奪,最終獲得更優的性能。
使用ThreadLocalRandom,只需要調用其靜態方法current方法即可獲得一個ThreadLocalRandom對象,然後再調用其中的一個方法獲得一個隨機數:
//nextInt方法可以指定兩個整數以作上限和下限,以下返回4到77的隨機整數 int r = ThreadLocalRandom.current().nextInt(4, 77);