JDK线程池运行原理总结

1、当你的任务超过核心线程剩余任务就在队列等待,复用核心线程数去完成剩余等待任务,(前提是任务数在核心线程数加队列容量范围);2、当你的任务数大于核心线程且大于队列容量,这时候就会变成max线程数去完成等待的队列(前提是任务数在max线程数+队列之间);等待时间结束时线程池的线程数量为max大于核心线程数的部分会被销毁,队列所有任务执行结束时核心线程会处于阻塞等待状态,(gettask方法调用了队列容器的take()方法实现阻塞); 

最重要的线程复用原理就是 源码里的内部类Worker里面的runwork里面是个while循环判断gettask里面去执行,所以实现了复用;

 

复用的可以自己写个简单的代码增加理解,

1、假设有两个工人A和B, 那你代码可以新建两个线程,且线程的run里面写个while循环执行任务,这里的任务你可以是一个队列容器,你可以用LinkedList这个容器,循环去判断容器大小再去removefirst这个(加上锁)容器最好加个sleep几秒,不然太快了。。。

2、mian里再搞个for循环往LinkedList里丢东西搞个十几个应该差不多了

3、整体就是new两个线程去操作容器,也就达到了两个线程复用去执行这十几个任务

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值