一:类继承关系
二:构造函数
三:Executors的静态方法
(1)newCachedThreadPool()
(2)newFixedThreadPool(int nThreads)
(3)newScheduledThreadExecutor()
(4)newSingleThreadExecutor()
Executors类中含有四种常用的静态方法类构造线程池。通过这四种方法,可以解决大部分要求不太高的需求。如果对性能有更高要求,需要自己通过ThreadPoolExecutor提供的构造函数去定制化线程池。
四:阻塞队列
ThreadPoolExecutor的第五个构造参数是阻塞队列,阻塞队列分为无界阻塞队列、有界阻塞队列和同步移交。
常用的有界阻塞队列包括:
(1)ArrayBlockingQueue
(2)LinkedBlockingQueue
(3)PriorityBlockingQueue
选用哪一种阻塞队列,需要根据具体情况来确定。
五:线程工厂
ThreadPoolExecutor的第六个构造参数是线程工厂。线程池中的线程就是通过该工厂的工厂方法来产生的。
public interface ThreadFactory {
Thread newThread(Runnable r);
}
通过实现该接口,可以对线程池的线程工厂进行定制,满足业务开发需求。
六:饱和策略
ThreadPoolExecutor的第七个构造参数是饱和策略。当使用第四节中的有界阻塞队列时,当队列被填满后,对于后续到来的任务,需要采用一种饱和策略来进行处理。
JDK提供了如下的几种饱和策略:
(1)AbortPolicy
这种策略是默认的饱和策略,当队列满后,对后续的任务会抛出非检查型的异常RejectedExecutionException。
(2)CallerRunsPolicy
这种策略将后续任务回退给调用者,如回退给主线程去执行,来降低线程池的压力。
(3)DiscardPolicy
从名字可以看出,就是默默地抛弃任务。
(4)DiscardOldestPolicy
默默地抛弃下一个将被执行的任务。
閱讀更多 Java資深研發 的文章