Java volatile的原子性研究、不能保证原子性
volatile只能保证线程间变量的可见性,但是不能保证变量操作的原子性。
/** * volatile原子性研究 * 原子性:一批操作是一个整体,要么同时成功,要么同时失败,不能被干扰。 */
public class VolatileAtomicDemo {
public static void main(String[] args) {
Runnable target = new MyRunnable();
for(int i = 1 ; i <=100;i++){
//启动100个线程,执行100次任务
new Thread(target).start();
}
}
}
class MyRunnable implements Runnable{
private volatile int count;
//一次任务是一个整体,加100
@Override
public void run() {
for (int i = 1 ; i <=100;i++){
count++;
System.out.println(count);
}
}
}
上列代码并不能每次运行结果都到10000,因为volatile不能保证原子性。
还没有评论,来说两句吧...