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");
    }

  • 相关阅读:
    基金定投是什么?定投的特点?
    Linux环境下MySQL 5.6安装与配置----亲测有效----纯离线安装
    OI生涯回忆录
    NOI2020游记
    Redis操作
    Redis概述
    Memcached
    动态规划——最长回文字符串
    两数之和&无重复字符最长字符串
    黑盒测试常见方法
  • 原文地址:https://www.cnblogs.com/javac/p/6964966.html
Copyright © 2011-2022 走看看