1. 核心线程的创建:
当向线程池提交一个任务时,判断是否还能创建新的核心线程来执行该任务,能的话创建一个新的核心线程,不能的话放入任务等待队列。 注意:这里就算有核心线程是空闲状态,当能创建核心线程时,还是会创建,而不是拿一个空闲的核心线程来执行。空闲的核心线程会不断扫描等待任务队列,从队列里拿到任务然后进行执行。
2.自定义拒绝策略:
希望自定义局决策落时,实现RejectedExecutionHandler
接口。
3.关闭线程池:
调用shutdowm后,关闭线程池,线程池的状态变为 SHUTDOWN。线程池不再接受新任务了,但是队列里的任务得执行完毕。 调用shutdownNow后,会将线程池的状态设置为STOP,然后尝试停止所有正在执行任务的线程或暂停任务的线程,并返回等待执行任务的列表。
只要调用了这两个关闭方法中的任意一个,isShutdown方法就会返回true。当所有的任务 都已关闭后,才表示线程池关闭成功,这时调用isTerminaed方法会返回true。
4.为线程池中的线程命名:
使用guava提供的ThreadFactoryBuilder来创建线程。
private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
private static ExecutorService pool = new ThreadPoolExecutor(5, 200,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());