四种线程池

ThreadPoolExecutor的参数:
int coreSize, 核心线程
int maxSize,最大线程
long time,空闲线程超时时间, 超时后销毁
TimeUnit ,空闲时间单位
BlockingQueue taskQueue,存放任务的队列,
ThreadFactory threadFactory) 创建线程的线程工厂
当有新的任务时:
a. 如果此时线程数小于核心线程, 那么将会创建一个线程
b. 如果此时线程数大于等于核心线程,且没有空闲线程, 那么任务将会放在队列中
c. 如果此时线程数大于等于核心线程,且没有空闲线程,队列已满, 将会创建新的线程
d. 如果此时队列已满且线程数等于最大线程, 那么抛出异常, 任务提交失败
核心线程是否销毁取决于 设置 quitCore , true则不会销毁
线程池的四种类型:
1. newCachedThread Pool 可缓存线程池
new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L , TimeUnit.SECONDS,
new SynchronousQueue());
特点: 没有核心线程, 最大线程为无限大, 所有线程空闲60s销毁,
SynchronousQueue容量为0,所有任务会立即被执行

2. newFixedThreadPool 定长线程池, 可控制线程最大并发数, 超出的线程会在队列中等待
new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue());
特点:只有核心线程, 由参数确定核心线程数, 超出的任务会在队列中等待

3. newScheduledThreadPool 定长线程池, 支持定时及周期性任务执行
super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS, new DelayedWorkQueue());
DelayedWorkQueue队列, 可延时执行阻塞任务的队列和LinkedBlockingQueue是兄弟关系

4. newSingleThreadExecutor 单线程化的线程池, 使用唯一的工作线程来执行任务, 保证所有任务先进先出的执行顺序
ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()
线程之间的通信方式:

  1. volatile, Synchronized , ReentrantLock
  2. wait / notify
  3. 管道输入输出流
  4. Thread.join()
  5. ThreadLocal
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值