gpt4 book ai didi

java - Java 8 上的同步和 ExecutorService

转载 作者:行者123 更新时间:2023-12-02 02:31:54 24 4
gpt4 key购买 nike

我的期望是程序将返回输出“1000”。

但是,每次程序执行时都会出现不同的输出。

Counter类的increment()方法已经同步。只有这样才能避免竞争性阅读吗?

让它计算 1000 个增量的正确方法是什么?

package app;

public class Counter {

private Integer value;

public Counter(int initialValue) {
value = initialValue;
}

public synchronized void increment() {
value = value + 1;
}

public int getValue() {
return value;
}

}

package app;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {

public static void main(String[] args) {

Counter contador = new Counter(0);

ExecutorService executor = Executors.newFixedThreadPool(10);

for(int i = 0; i < 1000; i++) {
executor.submit(() -> {
contador.increment();
});
}

System.out.println(contador.getValue());

}

}

最佳答案

你的逻辑很好。

问题在于您在线程完成递增计数器之前打印了计数器的值。

将代码更改为:

for(int i = 0; i < 1000; i++) {
executor.submit(() -> {
contador.increment();
});
}

executor.shutdown(); //Shut down the executor

//Wait until the threads have stopped. A maximum of 1 minute is more than enough
executor.awaitTermination(1, TimeUnit.MINUTES);

System.out.println(contador.getValue()); //prints 1000

关于java - Java 8 上的同步和 ExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46958118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com