java自带线程池原理分析

newCachedThreadPool

缓存线程池,可无限大

CorePoolSize 核心线程 0

MaximumPoolSize 最大线程 max

keepAliveTime:60L

SynchronousQueue 队列 其实只有一个在排队 一个worker进来之后从队列取出一个

newFixedThreadPool

这是一种固定线程数的线程池,当前线程数大于总数则会等待

CorePoolSize 核心线程 10

MaximumPoolSize 最大线程 10

keepAliveTime:0

LinkedBlockingQueue 没有规定大小 会扩大很多 占用内存

newSingleThreadExecutor

单线程线程池

CorePoolSize 核心线程 1

MaximumPoolSize 最大线程 1

keepAliveTime:0

LinkedBlockingQueue 没有规定大小 会扩大很多 占用内存

为什么阿里不推荐使用以上三种

因为LinkedBlockingQueue默认没有设置队列大小,如果数据量很大会创建很大的队列占用内存

可以使用自定义线程池

自定义线程池:  ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 20, 2 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(10));//自定义线程

以上java自带的三个线程池都实现了ThreadPoolExecutor

ThreadPoolExecutor内部有实现4个拒绝策略:

(1)、CallerRunsPolicy,由调用execute方法提交任务的线程来执行这个任务;

(2)、AbortPolicy,抛出异常RejectedExecutionException拒绝提交任务;

(3)、DiscardPolicy,直接抛弃任务,不做任何处理;

(4)、DiscardOldestPolicy,去除任务队列中的第一个任务(最旧的),重新提交;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值