Java线程池

线程池
把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多带来使用上的开销。

  • 可重复使用已有线程,避免对象创建,消亡和过度切换的性能开销。
  • 避免创建大量同类线程所导致的资源过度竞争和内存溢出的问题。
  • 延迟任务线程池(newScheduledThreadPool)和缓存线程池(newCachedThreadPool)。

ThreadPoolExecutor的参数

1. corePoolSize
核心线程数,默认情况下核心线程一直存活在线程池中,如果将ThreadPoolExecutor的allowCoreThreadTimeOut属性设为true,如果线程池一直闲置并超过了keepAliveTime所指定的时间,核心线程就会被终止。

2. maximumPoolSize
最大线程数,当线程不够时能创建的最大的线程数。

3.keepAliveTime
线程池的闲置超过时间,默认情况下对非核心线程生效,如果闲置时间超过这个时间,非核心线程就会被回收。

4.unit
配合keepAliveTime使用,用来标识keepAliveTime的时间单位。

5.workQueue
线程池中的任务队列,使用execute()或submit()方法提交的任务都会存储在此队列中。

6.threadFactory
为线程池提供创建新线程的线程工厂。

7.rejectedExecutionHandler
线程池任务队列超过最大值之后的拒绝策略,RejectedExecutionHandler是一个接口,里面只有一个rejectedExecution方法,可在此方法内添加任务超出最大值的事件处理。ThreadPoolExecutor也提供了4种默认的拒绝策略:
1)new ThreadPoolExecutor.DiscardPolicy():丢掉该任务,不进行处理
2)new ThreadPoolExecutor.DiscardOldestPolicy():丢弃队列里最近的一个任务,并执行当前任务
3)new ThreadPoolExecutor.AbortPolicy():直接抛出RejectedExecutionException异常
4)new ThreadPoolExecutor.CallerRunsPolicy():既不抛弃任务也不抛出异常,直接使用主线程来执行任务

execute()和submit()的区别
都是用来执行线程池的,区别是submit()方法可以接收线程池执行的返回值。

线程池关闭

  • shutdown():不再接收新任务,等所有任务执行完毕终止
  • shutdownNow():所有任务立即终止,返回未执行的任务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值