H5W3
当前位置:H5W3 > 问答 > 正文

求JAVA多线程高手解答,一个关于验证Java多线程不安全的代码问题,困扰我好几天了,

这是要测试的线程不安全的类
求JAVA多线程高手解答,一个关于验证Java多线程不安全的代码问题,困扰我好几天了,

正常情况下,使用下面线程池测试上面的代码,结果并不是100,也就是说明线程不安全
求JAVA多线程高手解答,一个关于验证Java多线程不安全的代码问题,困扰我好几天了,

但使用下面的这个代码,结果总是100,也就是线程安全,但明明是不安全的呀
求JAVA多线程高手解答,一个关于验证Java多线程不安全的代码问题,困扰我好几天了,

public static void main(String[] args) throws InterruptedException {
El el = new El();
final int threadSize = 100;
final CountDownLatch countDownLatch = new CountDownLatch(threadSize);
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < threadSize; i++) {
executorService.execute(() -> {
el.add();
countDownLatch.countDown();
});
}
Thread.sleep(100);
System.out.println(el.get());
//另一个测试代码
Runnable r = new Runnable() {
@Override
public  void run() {
el.add();
}
};
Thread threads[]=new Thread[100];
for (int i = 0; i < 100; i++) {
threads[i] = new Thread(r," " + i);
}
for (int i = 0; i < 100; i++) {
threads[i].start();
}
Thread.sleep(1000);
System.out.println(el.get());
}

EL类

public class El {
public int count = 0;
public  void add() {
count += 1;
}
public int get() {
return count;
}
}

回答

threads[i].start 这个代码需要执行的时间比较长, 但是 el.run 函数执行非常短, 可能导致没有同时运行的情况
可以在 el.run 函数 中添加多些循环执行测试代码

另外el.run 函数代码只有增加值, 没有减少值

未经允许不得转载:H5W3 » 求JAVA多线程高手解答,一个关于验证Java多线程不安全的代码问题,困扰我好几天了,

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址