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级别的同步指令,相当于乐观锁,它可以测到其他线程对共享数据的变化情况