package com.example.threadDemo; /** * volatile 关键字对多个线程具备可见性,但不保证原子性 */ public class VolatileNoAtomic extends Thread { private static volatile int count; private static void addCount() { for (int i = 0; i < 1000; i++) { count++; } System.out.println(count); } @Override public void run() { addCount(); } public static void main(String[] args){ VolatileNoAtomic[] arr = new VolatileNoAtomic[10]; for (int i = 0;i<10;i++){ arr[i] = new VolatileNoAtomic(); } for (int i = 0;i<10;i++){ arr[i].start(); } } }
最终结果期望是1000 * 10 = 10000
实际结果:
(使用 private static AtomicInteger count = new AtomicInteger(0);
count.incrementAndGet(); 可以得到原子性
)