package com.chaohu;
class MyData {
volatile int num = 0;
public void addPlusPlus(){
this.num++;
}
}
/**
* 验证volatile关键字不保证原子性:20个线程,每个线程对共享
* 资源的变量值加1000次,如果都是原子操作,最终结果应该是20000.
*
*/
public class Test {
public static void main(String[] args) {
MyData myData = new MyData();
//20个线程操作资源类
for (int i = 1;i <= 20;i++){
new Thread(() -> {
for (int j = 1;j <= 1000;j++){
myData.addPlusPlus();
}
}).start();
}
//等20个线程都操作完之后,用main线程取得最终的共享资源类的变量值
while (Thread.activeCount() > 2){
//后台有一个main线程和GC线程
Thread.yield();
}
System.out.println(myData.num);
}
}
验证volatile关键字不保证原子性
最新推荐文章于 2024-10-28 20:09:57 发布