首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环到Executor服务

循环到Executor服务
EN

Stack Overflow用户
提问于 2017-07-27 10:13:41
回答 1查看 7.4K关注 0票数 3

我想使用JavaExecutor服务来做以下事情:

代码语言:javascript
复制
for(String s : multiMap.keySet()){
    for(String s1 : listB){
      for(String s2 : listC){
      //API call
      }
    }
 }

就像在for循环中一样,完成所需的时间太长了,而且永远不会结束。因此,我正在考虑在executorService中使用它,以便可以更快地完成任务。有没有人可以建议如何使用Executor服务来做到这一点?

注意:使用Java7。

EN

回答 1

Stack Overflow用户

发布于 2017-07-27 11:25:56

以下代码片段是使用ExecutorService解决此问题的示例。

代码语言:javascript
复制
public static void main(String[] args) throws Exception {
    int numRunnables = 3;

    ArrayList<String> listB = new ArrayList<String>();
    ArrayList<String> listC = new ArrayList<String>();

    BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(numRunnables, true);
    RejectedExecutionHandler handler = new ThreadPoolExecutor.CallerRunsPolicy();
    ExecutorService executor = new ThreadPoolExecutor(numRunnables, numRunnables, 0L, TimeUnit.MILLISECONDS, queue, handler);

    HashMap<String, String> multiMap = new HashMap<>();
    for(String s : multiMap.keySet()){

        executor.execute(new Runnable() {

            @Override
            public void run() {
                for(String s1 : listB){
                    for(String s2 : listC){
                    }
                }
            }
        });
    }       

    executor.shutdown();
    while (executor.isTerminated() == false){
        Thread.sleep(50);
    }
}

此外,我认为'ExecutorService executor = Executors.newFixedThreadPool(numThreads);‘是一个很少使用的函数,但它更易于访问,因此ExecutorService的初始用户经常使用它。当有大量的Runnable,每个都花费了相对较长的时间时,使用Executors.newFixedThreadPool的executor会导致内存问题,然后与像我上面的代码片段一样创建的ThreadPoolExecutor相比,花费的时间要长得多。

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

https://stackoverflow.com/questions/45340216

复制
相关文章

相似问题

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