【发布时间】:2022-11-05 00:06:05
【问题描述】:
嗨,我正在使用由 10 个线程组成的 executorService 在 java 中执行并发编程任务。我有一个包含 100 个元素的数组,所有元素最初都设置为 1000。我想做的是数组中有 2 个索引,我需要将随机量从第一个索引转移到第二个索引,我的问题是我我不确定在这种情况下如何使用 set 函数,因为 set 的第二个参数应该是 Future。
var ex = Executors.newFixedThreadPool(10);
List<Future<Integer>> elements = new ArrayList<>();
for (int i = 0; i < 100; i++) {
elements.add(ex.submit(() -> {
int val = 1000;
return val;
}));
}
ex.shutdown();
int sum = 0;
for (Future<Integer> el : elements) {
sum += el.get();
}
System.out.println("Initial sum: " + sum);
for (int i = 0; i < 10_000; i++) {
ex.submit(() -> {
int firstIndex = ThreadLocalRandom.current().nextInt(100);
int secondIndex = ThreadLocalRandom.current().nextInt(100);
int randomAmount = ThreadLocalRandom.current().nextInt(1000);
try {
if (elements.get(firstIndex).get() - randomAmount > 0) {
elements.set(firstIndex,elements.get(firstIndex).get() - randomAmount);
}
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
}
【问题讨论】:
标签: java executorservice java.util.concurrent java-threads