Java线程池详解

创建:

一般情况下创建线程池的方法是ThreadPoolExecutor pool = new ThreadPoolExecutor();

或者使用ExecutorService executorService = new ThreadPoolExecutor();

参数解释:

1. corePoolSize:[5] 核心线程数[一直存在除非 (allowCoreThreadTime0ut) ]; 线程池,创建好以后就准备就绪的线程数量,就等待来接受异步务去执行

2. maximumPoolsize:[200] 最大线程数量; 控制资源

3.keepAliveTime:存活时间。如果当前的线程数量大于core数量。并且线程空闲大于指定的keepAliveTime就释放; 释放空闲的线程数量为(maximumPoolSize-corePoolSize) 。

4.unit;时间单位

5.Blockingqueue<Runnable> workQueue:阻塞队列。如果任务有很多,就会将目前多的务放在队列里面.只要有线程空闲,就会去队列里面取出新的任务继续执行(默认size是Integer的最大值。如果不指定size可能会造成程序内存不够,所以需要根据业务指定大小)

6.threadFactory:线程的创建工厂

7.RejectedExecutionHandler handler:如果队列满了,按照我们指定的拒绝策略拒绝执行任务

线程池的工作顺序:

1)、线程池创建,准备好core数量的核心线程,准备接受任务

1.1、core满了,就将再进来的任务放入阻塞队列中。空闲的core就会自己去阳塞队列获取任务执行

1.2、阻塞队列满了,就直接开新线程执行,最大只能开到max指定的数量

1.3、max满了就用RejectedExecutionHandler拒绝任务

1.4、max都执行完成,有很多空闲,在指定的时间keepALiveTime以后,释放max-core这些线程

拒绝策略有哪些:

  1. DiscardOldstPolicy丢弃最老的任务

  1. CallerRunsPolicy 只用调用者所在的线程来运行任务

  1. DiscardPolicy 丢弃最新的任务(不会抛出异常)

  1. AbortPolicy丢弃最新的任务(会抛出异常)

Executor框架下的常见线程池简介:

  1. FixedThreadPool 创建固定线程数量的线程池

  1. SingleThreadExcutor 创建使用单个线程的线程池

  1. CachedThreadPool 创建一个会根据需要创建新线程的线程池

  1. ScheduledThreadPoolExecutor 创建一个在给定的延迟之后运行任务,或者定期执行任务的线程池

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值