原子量就是操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。对于想i++这中操作就适合使用原子量。
前面章节中volatile修饰的race++ 的出现错误 ,现在我们使用原子量就可以解决。
代码如下:
public class VolatileTestA {
private static AtomicInteger race = new AtomicInteger(0);
private static final int THREAD_COUNT = 200;
public static void main(String[] args) {
Thread[] threads = new Thread[THREAD_COUNT];
for(int i = 0; i < THREAD_COUNT; i++){
threads[i] = new Thread(new Runnable() {
public void run() {
for(int i = 0; i < 2000; i++){
race.incrementAndGet();
}
}
});
threads[i].start();
}
while (Thread.activeCount() > 1) {
Thread.yield();
System.out.println(race);
}
}
}
注意:原子量只是保证单个变量在某一个操作过程的安全,但无法保证你整个代码块,为了保证代码块的安全就得使用锁机制。