0
点赞
收藏
分享

微信扫一扫

面试-JDK-五种线程池的分类和作用

左手梦圆 2022-04-02 阅读 96

五种线程池的分类和作用

一、newCachedThreadPool

创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
特征:
(1)线程池中数量没有固定,可达到最大值(Interger. MAX_VALUE)
(2)线程池中的线程可进行缓存重复利用和回收(回收默认时间为1分钟)
(3)当线程池中,没有可用线程,会重新创建一个线程
(4)在使用CachedThreadPool时,一定要注意控制任务的数量,否则,由于大量线程同时运行,很有会造成系统OOM。

创建方式

Executors.newCachedThreadPool();

二、newFixedThreadPool

作用:创建一个可重用并且固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 Threads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。

特征:
(1)线程池中的线程处于一定的量,可以很好的控制线程的并发量
(2)线程可以重复被使用,在显示关闭之前,都将一直存在
(3)超出一定量的线程被提交时候需在队列中等待

创建方式:

Executors.newFixedThreadPool(int nThreads)//nThreads为线程的数量 

Executors.newFixedThreadPool(int nThreads,ThreadFactory threadFactory)//nThreads为线程的数量,threadFactory创建线程的工厂方式

三、newSingleThreadExecutor

创建一个单线程化的Executor,即只创建唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。线程异常结束,会有另一个取代它,保证顺序执行。单工作线程最大的特点是可保证顺序地执行各个任务

特征:
(1)线程池中最多执行1个线程,之后提交的线程活动将会排在队列中以此执行

创建方式:

Executors.newSingleThreadExecutor()//threadFactory创建线程的工厂方式
Executors.newSingleThreadExecutor(ThreadFactory threadFactory)

四、newScheduleThreadPool

创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行

特征:
(1)线程池中具有指定数量的线程,即便是空线程也将保留
(2)可定时或者延迟执行线程活动

创建方式:

Executors.newScheduledThreadPool(int corePoolSize)// corePoolSize线程的个数 

// corePoolSize线程的个数,threadFactory创建线程的工厂
newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)

五、newSingleThreadScheduledExecutor

创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。

特征:
(1)线程池中最多执行1个线程,之后提交的线程活动将会排在队列中以此执行
(2)可定时或者延迟执行线程活动

举报

相关推荐

0 条评论