线程池简单介绍

线程池:

(1)FixedThreadPool:可重用固定线程数的线程池
- 固定线程池,那么corePoolSize和maximumPoolSize是相同大小;
- keepAliveTime为0,表示空闲线程会立刻终止;
- 采用无界阻塞队列LinkedBlockingQueue,大小为Integer.MAX_VALUE,因此只有在线程池shutdown()或shutdownNow()后才会拒绝任务。

(2)SingleThreadExecutor:单个Worker线程的Executor
- 线程数量为1,corePoolSize和maximumPoolSize都是1;
- keepAliveTime为0,表示空闲线程会立刻终止;
- 采用无界阻塞队列LinkedBlockingQueue,大小为Integer.MAX_VALUE,因此只有在线程池shutdown()或shutdownNow()后才会拒绝任务。

(3)CachedThreadPool:根据需要创建线程的线程池
- corePoolSize为0,maximumPoolSize是无界的,为Integer.MAX_VALUE,因此只要有任务就会无限地创建线程,极端情况下会导致频繁的上下文切换,导致性能降低;
- 阻塞队列采用SynchronousQueue,这是没有容量的阻塞队列,在一个线程插入的时候,必须等待另一个线程移除,才能从插入的地方返回;
- keepAliveTime为60,表示空闲的线程会等待60s。

(4)ScheduledThreadPoolExecutor:可延迟执行的线程池,可以执行周期性任务。
- 采用无界阻塞队列DelayQueue,存放ScheduledFutureTask(三个重要参数:具体执行时间、被加入到线程池的序号、间隔时间)。DelayQueue封装了PriorityQueue(将任务排序,time小的放在前面先被执行)
线程从DelayQueue中获取到期的任务ScheduledFutureTask,执行该任务,如果是周期性任务,那么将ScheduledFutureTask重新设置下次执行的时间,再加入到DelayQueue中。
- DelayQueue是无界队列,因此maximumPoolSize无意义,传入corePoolSize来指定多个后台线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值