LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue<String>(1024);
ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat("job-pool-%d").build();
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors()*2,
Runtime.getRuntime().availableProcessors()*2,
0,
TimeUnit.SECONDS,
linkedBlockingQueue,
THREAD_FACTORY,
new ThreadPoolExecutor.AbortPolicy());
CountDownLatch countDownLatch = new CountDownLatch(list.size());
try{
for (Object object : list) {
//类要实现Callable接口
Future<Integer> future = threadPoolExecutor.submit(类);
resultList.add(future);
countDownLatch.countDown();
//循环判断queue中的线程大于1000,则等待1秒,直到小于1000位置,防止进行线程被拒绝
while(linkedBlockingQueue.size()>1000) {
Thread.sleep(1000);
System.out.println("暂停1秒");
}
}
//等待全部完成,在继续操作
countDownLatch.await();
//关闭线程池(不在接收新的线程)
threadPoolExecutor.shutdown();
}catch (Exception ex){
//出现异常后,关闭线程池
threadPoolExecutor.shutdownNow();
ex.printStackTrace();
}
}finally {
//最终判断线程池是否为空,进行关闭
if(threadPoolExecutor!=null) {
threadPoolExecutor.shutdownNow();
}
}