求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 函数代码只有增加值, 没有减少值

以上是 求JAVA多线程高手解答,一个关于验证Java多线程不安全的代码问题,困扰我好几天了, 的全部内容, 来源链接: utcz.com/a/65389.html

回到顶部