第一次发自己正式的博客 没想到还是以问问题的方式 如果大家有幸能挑中我的博客
请帮忙解决一下我的问题 欢迎大家在评论区评论 这次自己简单的写了一个案例 为
了方便 本人把两个类写一起了 但是请看下方code 为什么不管我加不加volatile
修饰
变量 得到的累加的值都没有丢失 但是按照我的意愿 是没有加volatie
修饰的int a = 0
的最终的值应该是<=20 的 但是遗憾的是我怎么测试 不管加不加volatile
修饰 得到的a
的值最终都是20 这里希望有缘人 正好曾经了解这方面知识的盆友可以帮忙解决
package com.example.demo;
import java.util.concurrent.atomic.AtomicInteger;
/**
- Created by Administrator on 2019/10/9.
*/
public class VolatileDemo01 {
public static void main(String[] args) {
test01();
}
//开启20个线程,测试volatile原子性
public static void test01 () {
Data data = new Data();
for (int i = 1; i <= 20; i++) {
new Thread(() -> {
for (int j = 1; j <= 1000; j++) {
data.addOne();
}
}).start();
}
//默认有main线程和gc线程
while (Thread.activeCount() > 2) {
Thread.yield();
}
System.out.println(data.a);
}
}
class Data {
// volatile int a = 0;
int a = 0;
//通过atomicInteger 可以解决volatile原子性的问题
// AtomicInteger atomicInteger = new AtomicInteger(0);
void addOne() {
this.a += 1;
// a = atomicInteger.incrementAndGet();
}
}