关于线程池的问题

查看 48|回复 1
作者:wholve   
线程池有个疑问,我的机器 4 核 16G,按照最优的线程数 2n+1 来说为 9 个,但是在如下代码中
public static void main(String[] args) {
        // 创建线程池,500 个线程数
        ExecutorService es = ThreadUtils.getInstance("approveProcessForBatch", 500);
        Map[I]> futureMap = new HashMap(SystemConstant.INITIAL_CAPACITY);
        for (int i = 0; i  delay5s(""));
        }
        System.out.println("开始执行时间:" + DateTime.now());
        for (int i = 0; i  future = es.submit(() -> delay5s("当前任务" + finalI));
            futureMap.put(finalI, future);
        }
        futureMap.keySet().forEach(i -> {
            try {
                // v 是当前任务名称
                Object v = futureMap.get(i).get();
                System.out.println(v + ",完成时间:" + DateTime.now());
            } catch (ExecutionException | InterruptedException e) {
                throw new BusinessException(e);
            }
        });
    }
目前设置了 500 个线程数,会在 5s 之后将 100 个任务全部完成,假如我只设置 9 个,那预计需要 250/9 * 5s 的时间,导致这个现象的原因是啥?

int, 线程池, 线程数, future

blankmiss   
什么原因 你倒是说清楚啊
您需要登录后才可以回帖 登录 | 立即注册

返回顶部