一、什么是原子性
原子性,是指一批操作是一个整体,要么同时成功,要么同时失败,不能被干扰。
二、volatile修饰变量并不能保证原子性代码案例。
package com.zjl.study.多线程.volatile不能保证原子性案例;
/**
* Created by zjl 2022/5/29
**/
public class VolatileAtomic {
public static void main(String[] args) {
// 1、创建1个线程任务
MyRunnable myRunnable = new MyRunnable();
// 2、创建100个线程,执行100次任务,线程安全情况下,
// 最终count值应该为 10000,但结果并不是
for (int i = 1; i <= 100; i++) {
new Thread(myRunnable).start();
}
}
}
class MyRunnable implements Runnable {
private volatile int count;
@Override
public void run() {
for (int i = 1; i <= 100; i++) {
count++;
System.out.println("count值为 ==============> " + count);
}
}
}
三、运行结果
四、结论
创建100个线程,执行100次任务,每个任务累加100,如果volatile能保证原子性,最终count值应该为 10000,但结果并不是。说明,volatile修饰变量并不能保证原子性。