线程池无非就那几个参数:核心线程、最大线程、回收时间、队列,没啥难的,有手就能学废
我这里直接上demo,不知道参数啥意思的可以先去隔壁补补课,虽然本文也会提到,但你最好先大概知道点,线程池实现运行机制总结
重点来了,我们带着问题来看demo
如上,new了个线程池,core线程数10,最大线程数20,任务队列容量30,请听题!!
问题0:往上述线程池中提交5个任务,任务执行完总耗时多少?
分析:我核心线程数10,也就是说10个线程会长期处于活跃状态,来任务立马能执行,5<10,所以5个任务立马全部执行,多线程并行当然是异步,所以是500ms
插个嘴:为什么不是500而是540,因为代码执行需要花时间,毕竟是模拟提交任务,并不是真正一瞬间提交完,而且误差跟你电脑cpu频率有关
问题1:提交10个任务,总耗时多少?
依然是500,10个任务和5个任务其实都一样,没超过核心线程数,来一个执行一个
问题2:提交11个任务,总耗时多少?
1000,别惊讶,这就是很多人没搞懂线程池机制的关键点,虽然只多了一个任务,但是第11个任务不会马上执行,因为队列没满,所以前10个任务会立马执行,而第11个会被扔到队列中,等有线程空出来了再执行
问题3:提交20个任务,总耗时多少?
也是1000,别问为什么也别杠,今天就是耶稣来了它也是1000,这20个任务,前10个任务来一个执行一个,从第11个到第20个会全部丢进队列,当前十个任务有任务执行完了,才会从队列取出执行
问题4:提交30个任务,总耗时多少?
当然是1500啦,30/10=3,3*500=1500
问题5:提交40个任务,总耗时多少?