優雅的編寫多線程——原子量

原子量就是操做變量的操做是「原子的」,該操做不可再分,所以是線程安全的。對於想i++這中操做就適合使用原子量。java

前面章節中volatile修飾的race++ 的出現錯誤 ,如今咱們使用原子量就能夠解決。安全

代碼以下:spa

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);

        }
    }
}

注意:原子量只是保證單個變量在某一個操做過程的安全,但沒法保證你整個代碼塊,爲了保證代碼塊的安全就得使用鎖機制。線程

相關文章
相關標籤/搜索