public class VolatileDemo implements Runnable{
private static volatile int count = 0;
private Random random = new Random();
public static void main(String[] args) {
for(int i=0;i<1000;i++){
new Thread(new VolatileDemo()).start();
}
while(Thread.activeCount()>1){
Thread.yield();
}
System.out.println(count);
}
@Override
public synchronized void run() {
try {
Thread.sleep(random.nextInt(1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" " + count++);
}
}
运行(在jdk1.8中)后,答案不是1000。请告诉我原因。
答案 0 :(得分:0)
易失性对于“增量”操作并不安全,因为它不是原子的(读,增量,写) 挥发只是保证对变量进行的更改将对所有读取该变量的线程可用。
对于安全增量操作,您应该改为“原子”变量