gpt4 book ai didi

java - 使用java中的线程计算列表中的数字总和

转载 作者:行者123 更新时间:2023-12-01 08:47:17 25 4
gpt4 key购买 nike

输入是整数列表。我想检查我们是否可以生成 10 个线程来查找整数之和。我知道我们可以传递共享变量并进行同步,但是有没有什么方法可以在没有同步块(synchronized block)的情况下做到这一点以减少延迟?(可能不使用 java.util.concurrent 包类?)

最佳答案

如果您不修改列表,您可以组织您的线程,以便它们仅读取列表的一部分,并且由于它只是读取,因此它应该在没有同步的情况下工作,以下应该可以工作(适应您的需要):

public class Test {

public static List<Integer> integers;
public static void main(String[] args) {
integers =new ArrayList<Integer>();
integers.add(1);
integers.add(3);
integers.add(2);
integers.add(6);
ExecutorService executor = Executors.newCachedThreadPool();
Test test = new Test();
Future<Integer> subRes1 = executor.submit(test.new ListTask(0, 1));
Future<Integer> subRes2 = executor.submit(test.new ListTask(2, 3));

int total;
try {
total = subRes1.get() + subRes2.get();
System.out.println(total);
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

private class ListTask implements Callable<Integer>{

private int start;
private int end;

public ListTask(int start, int end){
this.start =start;
this.end = end;
}
@Override
public Integer call() throws Exception {
// TODO Auto-generated method stub
int subTotal = 0;
for (int i = start; i <= this.end; i++){
subTotal += integers.get(i);
}
return subTotal;
}

}


}

输出:12

关于java - 使用java中的线程计算列表中的数字总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42598708/

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