输入是整数列表。我想检查一下我们是否可以产生10个线程来计算整数的和。我知道我们可以传递共享变量并进行同步,但有没有办法在没有同步块的情况下减少延迟?(可能不使用java.util.concurrent包类?)
发布于 2017-03-05 01:16:10
如果你没有修改你的列表,你可以组织你的线程,使它们只读列表的一部分,而且由于它只是一个读,它应该在没有同步的情况下工作,下面应该工作(适应你的需要):
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
https://stackoverflow.com/questions/42598708
复制相似问题