Open luryson opened 5 years ago
https://github.com/crossoverJie/JCSprout/blob/master/docs/thread/thread-gone2.md
这篇文章比较详细的描述了线程池的工作流程,但是有一点需要指出:
这里的描述感觉有点误导,线程池中并发的实际是Worker。 我们在不但向线程池中提交任务的时候,线程池根据配置,不断生成新的Worker或者将任务放到队列中,而新生成的Worker是用Thread封装后,执行了start()方法。而Worker的任务是执行分配的Runnable或者从队列中pool新提交的Runnable来进行执行,所以调用的是Runnable的run方法。(ps: start 是 Thread的方法,并非Runnable的方法)
所以关于这个问题的一个简单解释就是: 异常导致Worker退出,同时已提交的Runnable也不存在了,所以由线程池保证新生成的Worker并不能从队列中获取新的任务而一直处于等待状态。
https://github.com/crossoverJie/JCSprout/blob/master/docs/thread/thread-gone2.md
这篇文章比较详细的描述了线程池的工作流程,但是有一点需要指出:
这里的描述感觉有点误导,线程池中并发的实际是Worker。 我们在不但向线程池中提交任务的时候,线程池根据配置,不断生成新的Worker或者将任务放到队列中,而新生成的Worker是用Thread封装后,执行了start()方法。而Worker的任务是执行分配的Runnable或者从队列中pool新提交的Runnable来进行执行,所以调用的是Runnable的run方法。(ps: start 是 Thread的方法,并非Runnable的方法)
所以关于这个问题的一个简单解释就是: 异常导致Worker退出,同时已提交的Runnable也不存在了,所以由线程池保证新生成的Worker并不能从队列中获取新的任务而一直处于等待状态。