ThreadPoolExecutor线程池

一:类继承关系

ThreadPoolExecutor线程池

二:构造函数

ThreadPoolExecutor线程池

三: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

默默地抛弃下一个将被执行的任务。


分享到:


相關文章: