线程池是如何执行逻辑的?

首先还是和普通线程池创建的过程一样,指定线程名,核心线程数,最大线程数,队列,拒绝策略,最大空闲时间,下面我用的创建线程池的默认队列方法 是根据我们的队列大小来默认的,

这里的注意点是线程数的设定应该是处理器数的一半(也不是强制要求),LinkedBlockingQueue基于链表的无界阻塞队列(其实最大容量为Interger.MAX),你可以给定队列大小, SynchronousQueue一个不缓存任务的阻塞队列,生产者放入一个任务必须等到消费者取出这个任务。也就是说新任务进来时,不会缓存,而是直接被调度执行该任务,如果没有可用线程,则创建新线程,如果线程数量达到maxPoolSize,则执行拒绝策略。

好了,我们不是来说这个的,线程池创建完成后,我们可以通过个计数器CountDownLatch来控制线程的后续执行,

接着我们通过个死循环,不停的向线程池发送任务 任务完成再跳出,跳出的时候看计数器里的线程有没有执行完,执行完了再执行后续的操作,否则进入await等待,

好了,这是总体流程,那提交后线程池内部怎么操作呢?这里注意我们给个结束的标志作为参数给线程池以便告诉他啥时候结束;然后我们看线程池的call方法

在里面写上我们的逻辑,如果结束标志为FALSE则返回FALSE继续执行,直到结束标志为true,将CountDownLatch计数器减一, 如果不是很好理解,可以看下代码,应该就很清晰了,里面的逻辑具体场景具体分析,比如你有一个变量需要随着分析进行变化,那么你就要考虑锁啊还是啥的,看我们这返回结果

这里我们的拒绝策略是主线程执行,也就是不丢弃数据,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值