线程池使用场景?内核线程池
单个任务处理时间比较短
需要处理的任务数量很大
1、当前线程数小于核心线程数直接创建任务 addWorker(Runnable firstTask, boolean core)
2、提交任务放入阻塞队列BlockingQueue.offer(T)
3、线程池处于running状态,但是没有线程,则创建线程
4、往线程池中创建新的线程失败,则reject任务
AbstractExecutorService.submit()实现了ExecutorService.submit()
可以获取执行完的返回值, 而ThreadPoolExecutor 是AbstractExecutorService.submit()的子类,所以submit方法也是ThreadPoolExecutor`的方法。
FutureTask\ReentrantLock