一、什么是原子性
原子性,是指一批操作是一个整体,要么同时成功,要么同时失败,不能被干扰。
二、使用加锁方式保证原子性代码案例。
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 int count;
@Override
public void run() {
// 加锁保证原子操作
synchronized (MyRunnable.class){
for (int i = 1; i <= 100; i++) {
count++;
System.out.println("count值为 ==============> " + count);
}
}
}
}
三、运行结果
四、结论
创建100个线程,执行100次任务,每个任务累加100,最终count值应该为 10000,加锁之后,无论执行多少次,执行结果都是10000。说明,加锁能保证原子性。