java使用atomic原子类

    科技2022-07-20  111

    产生背景

    当给变量加了volatile关键字, 表示该变量对所有线程可见, 但不保证原子性.

    public class VolatileDemo extends Thread { public volatile static int count = 0; @Override public void run() { for(int i = 0; i < 10000; i++) { count++; } System.out.println("count:"+count); } public static void main(String[] args) { for(int i = 0; i < 10; i++) { VolatileDemo volatileDemo = new VolatileDemo(); volatileDemo.start(); } } }

    只需看最后一个值,没到10,000,无法保证想线程安全

    使用atomic原子类

    public class VolatileDemo extends Thread { // public volatile static int count = 0; // 保证数据原子性问题 public static AtomicInteger count = new AtomicInteger(0); @Override public void run() { for(int i = 0; i < 10000; i++) { // count++; count.incrementAndGet(); } // System.out.println("count:"+count); System.out.println("count:"+count.get()); } public static void main(String[] args) { for(int i = 0; i < 10; i++) { VolatileDemo volatileDemo = new VolatileDemo(); volatileDemo.start(); } } }

    Processed: 0.012, SQL: 8