Java线程池,工作窃取算法
前言 在上一篇《java线程池,阿里为什么不允许使用Executors?》中我们谈及了线程池,同时又发现一个现象,当最大线程数还没有满的时候耗时的任务全部堆积给了单个线程, 代码如下: ThreadPoolExecutor executor = new ThreadPoolExecutor( 1, //corePoolSize 100, //maximumPoolSize 100, //keepAliveTime TimeUnit.SECONDS, //unit new LinkedBlockingDeque<>(100));//workQueue for (int i = 0; i < 5; i++) { final int taskIndex = i; executor.execute(() -> { System.out.println(taskIndex); try { Thread.sleep(Long.MAX_VALUE); } catch (InterruptedException e) { e.printStackTrace(); } }); }...