Java自定义线程池详解(2)

一个比较特殊的队列:SynchronousQueue,没有容量可言,提交任务就意味着一直阻塞等待任务的线程立刻得到任务进行执行。说白了,就是不要暂存到队列中,任务直接提交给线程进行执行。由于任务无法暂存,因此缓存线程池会根据任务的实际情况,进行线程池的增长,直至maximumPoolSize(Integer.MAX_VALUE)。

注意到keepAliveTime被设置成了60S,意思就是说如果任务来了很多,缓存线程池创建了不少线程来对付它们,任务处理的差不多了,那么等待60S后,还没有任务需要处理,那么进行线程回收处理。

单线程池

Java自定义线程池详解

特点:

无界队列+核心、最大线程数都是1。

打个简单比喻,任务来了,不管多少,那么有序的放着,工人只有一个,那就按照顺序处理任务就是了。就是一个单线程顺序处理任务的情况。

定时线程池

特点:

利用延时队列DelayedQueue(无界队列),完成线程池实现定时以及周期性执行任务的需要。

拒绝策略

JDK已经提供了几种拒绝策略,如下所示:

Java自定义线程池详解

我们需要自定义决绝策略时,很简单,直接实现RejectedExecutionHandler的rejectedExecution方法即可。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ef8ba6b2fa37060c490ab7e0cfc43e90.html