Bootstrap

线程池的执行流程

目录

1. 线程池的创建

2. 提交任务

3. 任务的排队

4. 线程的获取与任务执行

5. 任务的处理

6. 线程回收

7. 异常处理

8. 关闭线程池


1. 线程池的创建

创建一个线程池并定义其核心参数,例如核心线程数(corePoolSize)、最大线程数(maxinumPoolSize)、任务队列(workQueue)、线程工厂(threadFactory)、拒绝策略(handler)等。

常见的线程池实现有固定线程池(FixedThreadPool)、可缓存线程池(CachedThreadPool)、单线程池(SingleThreadExecutor)和定时线程池(ScheduledPool)。

2. 提交任务

用户将任务(通常实现 Runnable 或 Callable 接口)提交给线程池。这个操作通常通过 execute() 或 submit() 方法进行。

3. 任务的排队

提交的任务首先会被放入一个任务队列中(如 BlockingQueue 、LinkedBlockingQueue)。线程池在处理任务时,会从这个队列中取出任务。

4. 线程的获取与任务执行

(1)如果当前运行的线程数量小于核心线程数,线程池会创建新的线程来执行任务。

(2)如果已达到核心线程数,则新的任务将被放入任务队列中,直到有空闲线程来处理。

(3)当任务队列已满且当前线程数小于最大线程数时,线程池会创建新的线程。

(4)如果线程数达到了最大线程数,后续的任务就会被拒绝(根据线程池的拒绝策略)。

5. 任务的处理

线程从任务队列中获取任务并执行,执行过程中可能会抛出异常,线程池可以根据配置进行处理。

6. 线程回收

执行完任务后,线程会根据空闲时间设置决定是继续存在还是被回收。如果线程空闲超过一定时间,可以被销毁以节省资源。

7. 异常处理

线程池在任务执行过程中如果出现异常,可以通过自定义的异常处理机制进行处理,以避免应用程序崩溃。

8. 关闭线程池

在任务处理完成后,线程池可以被设置为关闭状态,释放所有资源。可以通过 shutdown() 方法进行有序关闭,或使用 shutdownNow() 进行强制关闭。

;