易失性和与多线程同步不起作用


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。请告诉我原因。

易失性对于"增量"操作不安全,因为它不是原子的(读取,增量,写入( 易失性仅保证对变量所做的更改可供所有读取它的线程使用。

对于安全的增量操作,您应该改为"原子"变量

最新更新