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

java 自定义线程池

作者:暗夜幽殤   发布日期:2025-06-27   浏览:96

import java.util.concurrent.*;

public class CustomThreadPoolExample {

    public static void main(String[] args) {
        // 创建一个自定义线程池
        ThreadPoolExecutor executor = new ThreadPoolExecutor(
            2, // 核心线程数
            4, // 最大线程数
            60, // 空闲线程的存活时间
            TimeUnit.SECONDS, // 时间单位
            new LinkedBlockingQueue<>(10), // 任务队列,最多容纳10个任务
            new CustomThreadFactory(), // 自定义线程工厂
            new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
        );

        // 提交任务到线程池
        for (int i = 0; i < 15; i++) {
            int taskNumber = i + 1;
            executor.submit(() -> {
                System.out.println("Task " + taskNumber + " is running on thread " + Thread.currentThread().getName());
                try {
                    Thread.sleep(2000); // 模拟任务执行时间
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
                System.out.println("Task " + taskNumber + " is completed.");
            });
        }

        // 关闭线程池
        executor.shutdown();
        try {
            if (!executor.awaitTermination(800, TimeUnit.MILLISECONDS)) {
                executor.shutdownNow();
            }
        } catch (InterruptedException e) {
            executor.shutdownNow();
        }
    }

    // 自定义线程工厂
    static class CustomThreadFactory implements ThreadFactory {
        private int count = 0;

        @Override
        public Thread newThread(Runnable r) {
            return new Thread(r, "Custom-Thread-" + (++count));
        }
    }
}

解释说明:

  1. ThreadPoolExecutor:这是 Java 中用于创建自定义线程池的主要类。通过它可以精确控制线程池的核心线程数、最大线程数、空闲线程的存活时间等参数。

  2. 核心线程数和最大线程数corePoolSize 是线程池中保持的最小线程数,即使这些线程是空闲的;maximumPoolSize 是线程池允许的最大线程数。当任务队列已满且当前线程数小于最大线程数时,会创建新线程来处理任务。

  3. 空闲线程的存活时间keepAliveTime 是指当线程数超过核心线程数时,多余的空闲线程在终止前等待新任务的最长时间。

  4. 任务队列workQueue 用于保存等待执行的任务。这里使用了 LinkedBlockingQueue,并设置了队列的最大容量为 10。

  5. 线程工厂threadFactory 用于创建新线程。我们实现了一个自定义的 ThreadFactory,以便为每个新线程指定一个有意义的名字。

  6. 拒绝策略:当线程池无法处理新任务(例如,线程数已达最大且任务队列已满)时,可以设置拒绝策略。这里使用了 CallerRunsPolicy,它会将任务回退给调用者线程执行。

  7. 提交任务:使用 submit() 方法向线程池提交任务。每个任务会在某个线程中执行,并打印出任务编号和执行线程的名字。

  8. 关闭线程池:使用 shutdown() 方法优雅地关闭线程池,确保所有已提交的任务都执行完毕后再关闭。awaitTermination() 用来等待线程池中的任务完成,超时后会强制关闭线程池。

上一篇:java localtime

下一篇:java 验证码

大家都在看

java连接数据库的代码

ubuntu 卸载java

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java 时间加一天

java demo

java 截取

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

Laravel 中文站