首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中使用线程的列表中的数字总和

java中使用线程的列表中的数字总和
EN

Stack Overflow用户
提问于 2017-03-05 01:00:49
回答 1查看 940关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2017-03-05 01:16:10

如果你没有修改你的列表,你可以组织你的线程,使它们只读列表的一部分,而且由于它只是一个读,它应该在没有同步的情况下工作,下面应该工作(适应你的需要):

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42598708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档