package test1;
/*
1.验证volatile的可见性
1.1 假如int number = 0 ,number变量之前根本没有添加volatile关键字修饰,没有可见性
1.2 添加了volatile 可以解决可见性问题
2.验证volatile不保证原子性
2.1 原子性指的是什么意思?
不可分割,完整性,也即某个线程正在做某个业务时,中间不可以被加塞或者被分割。需要整体完整,要么同时成功,要么同时失败
*/
class MyData{
volatile int number = 0;
public void addPlusPlus(){
number++;
}
}
public class VolatileNotAtomicDemo {
public static void main(String[] args) {
MyData myDate = new MyData();
for (int i = 1; i <=20 ; i++) {
new Thread(()->{
for (int j = 1; j <=1000 ; j++) {
myDate.addPlusPlus();
}
},String.valueOf(i)).start();
}
while (Thread.activeCount()>2){
Thread.yield();
}
System.out.println(Thread.currentThread().getName() + "\t finally number value is " + myDate.number);
}
}