优雅的编写多线程——原子量

原子量就是操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。对于想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);

        }
    }
}

注意:原子量只是保证单个变量在某一个操作过程的安全,但无法保证你整个代码块,为了保证代码块的安全就得使用锁机制。

你可能感兴趣的:(优雅的编写多线程——原子量)