AtomicInteger
及java.util.concurrent.atomic
package下其他的數值類別提供了防鎖死(lock-free),執行緒安全(thread-safe)的原子操作。
一般的整數變數,也就是用int
,Integer
宣告的變數,在進行累加累減的計算是非執行緒安全的(non-thread-safe),因此在多執行緒的環境下應避免使用普通的整數變數進行計算;
public class Counter {
private int count = 0;
public int count() {
return count++; // 非執行緒安全,因為其相當於counter = counter + 1;
}
}
進行counter++
累加計算時,實際上是counter = counter + 1
,也就是先從變數counter
取出值,加上1,然後放回counter
變數中,在多執行緒環境時,從counter
取出數值的時候就有可能是另一條執行緒而導致非預期的結果。
而AtomicInteger
因為有執行緒安全的機制,所以其用於在多執行緒的環境下對整數進行累加或累減等運算,避免因為執行緒干涉造成非預期的結果。
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicCounter {
private AtomicInteger atomicInteger = new AtomicInteger();
public int count() {
return atomicInteger.getAndIncrement(); // thread-safe
}
}
沒有留言:
張貼留言