1.如果此时线程数小于核心线程数,那么就会新起一个线程来执行当前的任务。
2.如果此时线程数大于核心线程数,那么就会将任务塞入阻塞队列中,等待被执行。
3.如果阻塞队列满了,并且此时线程数小于最大线程数,那么会创建新线程来执行当前任务。
4.如果阻塞队列满了,并且此时线程数大于最大线程数,那么会采取拒绝策略。
以上就是任务提交给线程池后各种状况汇总,一个很容易出现理解错误的地方就是当线程数达到核心数的时候,任务是先入队,而不是先创建最大线程数。
从上述可知,线程池里的线程不是一开始就直接拉满的,是根据任务量开始慢慢增多的,这就算一种懒加载,到用的时候再创建线程,节省资源。
此时线程数小于核心线程数,并且线程都处于空闲状态,现提交一个任务,是新起一个线程还是给之前创建的线程?
此时线程池会新起一个线程来执行这个新任务,不管老线程是否空闲。
你是如何理解核心线程的?
从上一个问题可以看出,线程池虽说默认是懒创建线程,但是它实际是想要快速拥有核心线程数的线程。核心线程指的是线程池承载日常任务的中坚力量,也就是说本质上线程池是需要这么些数量的线程来处理任务的,所以在懒中又急着创建它。
网友评论