Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java线程池拒绝策略

作者:ンц枫飄落   发布日期:2026-06-06   浏览:18

import java.util.concurrent.*;

public class ThreadPoolRejectPolicyExample {

    public static void main(String[] args) {
        // 创建一个固定大小的线程池,线程池大小为2
        ThreadPoolExecutor executor = new ThreadPoolExecutor(
            2, 2, 0L, TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<>(1), // 队列容量为1
            new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略

        // 提交4个任务给线程池
        for (int i = 1; i <= 4; i++) {
            int taskId = i;
            executor.submit(() -> {
                System.out.println("Executing Task " + taskId + " by " + Thread.currentThread().getName());
                try {
                    Thread.sleep(2000); // 模拟任务执行时间
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Task " + taskId + " completed");
            });
        }

        // 关闭线程池
        executor.shutdown();
    }
}

解释说明:

  • 线程池配置:创建了一个固定大小为2的线程池,并且队列的最大容量为1。这意味着线程池最多可以同时处理3个任务(2个正在执行的任务 + 1个在队列中等待的任务)。
  • 拒绝策略:使用了CallerRunsPolicy作为拒绝策略。当线程池和队列都已满时,新的任务将由调用线程(即提交任务的线程)来执行,这可能会降低系统的吞吐量,但可以避免任务被丢弃。
  • 任务提交:提交了4个任务给线程池。由于线程池和队列的限制,第4个任务会被拒绝,并根据拒绝策略由调用线程执行。

如果你需要其他类型的拒绝策略(如AbortPolicyDiscardPolicyDiscardOldestPolicy),可以替换new ThreadPoolExecutor.CallerRunsPolicy()部分。

上一篇:java获取服务器ip和端口号

下一篇:java线程池原理

大家都在看

java url decode

java判断是windows还是linux

java连接数据库的代码

java date类型比较大小

java djl

ubuntu 卸载java

es java api

java list 查找

java 解压rar

jsonobject.tojavaobje

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站