线程池的执行流程和拒绝策略有哪些
时间: 2024-07-16 20:00:26 浏览: 54
线程池是一种常见的并发处理机制,它预先创建一定数量的工作线程,在任务提交到线程池时,线程池会决定如何执行这些任务。线程池的执行流程通常包括以下几个步骤:
1. **任务提交**:客户端将可执行的任务添加到线程池的任务队列中。
2. **线程获取**:当线程池中的某个工作线程空闲时,它会从任务队列中取出一个任务来执行。
3. **任务执行**:线程执行任务的具体逻辑,如果任务是异步的,可能还会涉及到回调或事件驱动。
4. **任务完成**:任务执行完毕后,线程可能会返回线程池,等待下一个任务,或者根据策略结束。
拒绝策略(Rejection Strategy)是指当线程池无法立即处理新的任务时,它所采取的行动。常见的拒绝策略有几种:
- **阻塞(Blocking)**:线程池等待任务队列非空,直到有其他线程完成任务释放资源。
- **丢弃(Discarding)**:直接拒绝任务,不通知客户端,任务可能丢失。
- **排队(Queueing)**:将新任务加入到任务队列中,排队等待,直到线程池有空闲资源。
- **拒绝并通知(Rejecting and Notifying)**:类似丢弃,但会通知客户端任务已被拒绝,由客户端决定如何处理。
相关问题
线程池的执行流程和拒绝策略有哪些?
线程池的执行流程一般分为以下步骤:
1. 任务提交,将任务加入线程池的任务队列中。
2. 线程池中的线程从任务队列中取出任务。
3. 线程执行任务。
4. 执行完任务后,线程从任务队列中取出下一个任务继续执行,直到线程池关闭。
拒绝策略指的是当任务队列已满时,新提交的任务如何处理。常见的拒绝策略有以下几种:
1. AbortPolicy:直接抛出异常,丢弃任务。
2. CallerRunsPolicy:由提交任务的线程执行该任务。
3. DiscardOldestPolicy:丢弃队列中最老的一个任务,并尝试重新提交新的任务。
4. DiscardPolicy:直接丢弃新的任务。
5. 自定义拒绝策略:可以自己实现 RejectedExecutionHandler 接口来定义拒绝策略。
java 线程池工作流程
Java 线程池的工作流程主要包括以下几个步骤:
1. **提交任务(Submit Task)**:当开发者创建一个 `FutureTask` 或者直接提交 `Runnable` 到线程池,比如通过 `ThreadPoolExecutor.execute()` 方法,任务就被添加到线程池的待处理队列中。
2. **调度任务(Schedule Task)**:线程池有一个内部的任务调度机制,会检查待处理队列是否为空。如果没有,就会从队列中取出第一个任务分配给一个空闲的线程去执行。
3. **线程执行(Thread Execution)**:线程开始执行任务,这可能是计算密集型任务,也可能是 I/O 密集型任务,取决于任务的性质。
4. **线程同步(Synchronization)**:多个任务可能会争夺共享资源,线程池内的线程通常会通过内置的同步机制(如 `Semaphore`, `CountDownLatch` 等)保证它们之间的正确协作。
5. **任务完成(Task Completion)**:一旦任务执行完毕,线程会将结果返回,如果是 `FutureTask`,还会调用其 `get()` 方法来获取结果。
6. **线程回收(Thread Recycling)**:线程池会根据配置决定线程的生命周期。如果线程执行完成后仍然有空闲线程,它会被放入线程池继续等待新的任务;如果线程池已满,线程则可能被销毁并重新创建。
7. **拒绝策略(Rejected Policy)**:当线程池达到最大并发数但仍接收到新任务时,会根据线程池的拒绝策略来处理,常见的策略有直接丢弃、循环队列溢出、抛出异常等。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)