### 线程池的执行过程说一下比如核心5最大数10等待3此时有20个线程进来。
线程池的执行过程如下:
-
创建线程池,包括核心线程数、最大线程数、等待队列和拒绝策略等属性。
-
当任务进来时,线程池会先判断当前线程数是否小于核心线程数,如果是,就创建新的线程来执行任务;如果不是,就将任务放入等待队列中。
-
如果等待队列已满,线程池还会判断当前线程数是否小于最大线程数,如果是,就创建新的线程来执行任务;如果不是,就执行拒绝策略,例如抛出异常或者直接丢弃任务。
-
当线程执行完一个任务后,会去等待队列中取出下一个任务进行执行,如果等待队列中没有任务了,则该线程会被销毁。
-
当线程池不再需要使用时,需要调用线程池的shutdown方法来关闭线程池,该方法会等待所有任务执行完毕后再关闭线程池。
针对题目中的情况,假设当前线程池中有3个线程在执行任务,还有2个任务在等待队列中,此时有20个线程进来,线程池的执行过程如下:
-
前5个线程会被分配到5个核心线程中执行任务。
-
接下来的10个线程会被放入等待队列中。
-
当等待队列中的任务执行完后,后面5个线程会被分配到5个新的线程中执行任务。
-
当所有任务执行完后,线程池中的所有线程都会被销毁。
原文地址: http://www.cveoy.top/t/topic/bgHn 著作权归作者所有。请勿转载和采集!