package com.dwz.atomic; import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; /** * AtomicInteger * 可見性 * 有序性 * 原子性 */ public class AtomicIntegerTest { public static void main(String[] args) throws InterruptedException { Set<Integer> set = Collections.synchronizedSet(new HashSet<Integer>()); AtomicInteger value = new AtomicInteger(); Thread t1 = new Thread() { @Override public void run() { int x = 0; while(x < 500) { int v = value.getAndIncrement(); set.add(v); System.out.println(Thread.currentThread().getName() + ":" + v); x++; } } }; Thread t2 = new Thread() { @Override public void run() { int x = 0; while(x < 500) { int v = value.getAndIncrement(); set.add(v); System.out.println(Thread.currentThread().getName() + ":" + v); x++; } } }; Thread t3 = new Thread() { @Override public void run() { int x = 0; while(x < 500) { int v = value.getAndIncrement(); set.add(v); System.out.println(Thread.currentThread().getName() + ":" + v); x++; } } }; t1.start(); t2.start(); t3.start(); t1.join(); t2.join(); t3.join(); System.out.println(set.size()); } }
總結:
1.volatile修飾的變量可以保證可見性和有序性
2.CAS算法,也就是CPU級別的同步指令,相當於樂觀鎖,它可以測到其他線程對共享數據的變化情況