线程池的推出,就是为了方便的控制线程数量。
用例:
1、testCommon是submit任务的,for循环任务一共有30个,当提交第一个任务的时候,去和corepoolSize判断一下,小于corepoolSize,所以创建一个工作线程来执行任务,一直提交到第5个线程的时候,等于corepoolSize,创建第5个线程执行任务,一共创建了5个线程。等到第6个任务来的时候,发现大于corepoolSize了,这时候去判断工作队列是否已满?
我创建的是无界的工作队列new SynchronousQueue<Runnable>() ,后面的括号里没有数字,代表无界队列。
2、判断工作队列是否已满?那当然是不满的,因为是无界,往进随便传任务都满不了。
3、这时候maximumPoolSize就没用了
4、如果工作队列是有界的话,参数为5,那么就要判断工作队列是否已经满了,显然没满,队列里还是空的,如果没满,就放进队列中5个任务,但是不创建线程,如果队列满了的话,这时候就要判断maximumPoolSize了,此时只有步骤1中的5个线程,5肯定小于maximumPoolSize,所以继续创建6,7,8,9,10线程来执行任务,直到达到了maximumPoolSize这个数字10,如果再进来任务的话,那么就执行拒绝策略了。
执行过程如下图:
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!