zoukankan      html  css  js  c++  java
  • 多线程和线程池

    有这样一个需求:你有一个list集合,需使用该list作为参数,调用另一个系统并返回结果后处理它(主要的目的是处理结果)
    解决方案:用线程池,不关闭线程池,将多个线程放入一个List集合中,使用invokeAll方法,相当于是将多个线程打包执行,统一返回,这样线程池可以一直不关闭,不用为了一个list开一个线程池,并且多个线程打包调用不会造成和其他用户的多线程冲突(究竟是你的线程还是我的线程):
    ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
    cachedThreadPool.invokeAll(List<new ExeRuleThread implement Callable<Objec>>);
    sample: https://blog.csdn.net/u014046563/article/details/89053115?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

    另一種解決思路:使用非返回結果的綫程,但傳入一個空的結果集合,在綫程中處理結果,例如:
    paramList//參數集合
    resultMap = new HashMap()//結果集合

    ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
    for (int i = 0; i < paramList.size(); i++) {
    inputParam = paramList.get(i);
    cachedThreadPool.execute(new ExeRuleThread(inputParam......,resultMap) implements Runnable);
    }
    cachedThreadPool.shutdown();

    try {
    cachedThreadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
    } catch (InterruptedException e) {
    logger.error("cachedThreadPool time out");
    }

  • 相关阅读:
    对组件库对再次封装
    cube-ui修改按钮颜色
    移动端框架
    mac环境变量
    Promise {<pending>
    MAC升级node及npm
    create-react-app项目中的eslint
    查看删除分支
    git分支的相关问题
    centos7系统下安装php-fpm并配置nginx支持并开启网站gzip压缩
  • 原文地址:https://www.cnblogs.com/javac/p/6964966.html
Copyright © 2011-2022 走看看