ITPub博客

首页 > 应用开发 > Java > Java 中如何实现一个线程池?

Java 中如何实现一个线程池?

原创 Java 作者:mingtian66 时间:2024-11-26 12:18:23 0 删除 编辑

在 Java 中,可以通过以下方式实现一个线程池:

    使用 ExecutorService(推荐):Java 提供了内置的线程池实现,简单易用且高效。
    自定义线程池:通过实现线程池的核心逻辑来自行实现。

以下分别介绍如何使用 Java 内置线程池 和 自定义线程池。
方法一:使用 ExecutorService

ExecutorService 是 Java 的线程池框架,可以通过 Executors 工厂类轻松创建。
示例:固定大小线程池

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolExample {
    public static void main(String[] args) {
        // 创建一个固定大小的线程池,线程池大小为 3
        ExecutorService executorService = Executors.newFixedThreadPool(3);

        // 提交任务到线程池
        for (int i = 0; i < 10; i++) {
            int taskId = i;
            executorService.execute(() -> {
                System.out.println("任务 " + taskId + " 执行线程: " + Thread.currentThread().getName());
                try {
                    Thread.sleep(1000); // 模拟任务执行
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            });
        }

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

常见线程池类型

    Executors.newFixedThreadPool(int nThreads):固定大小的线程池,线程数量固定,适用于稳定并发任务。
    Executors.newCachedThreadPool():可缓存的线程池,线程数量动态变化,适用于短期大量任务。
    Executors.newSingleThreadExecutor():单线程池,适用于任务串行执行。
    Executors.newScheduledThreadPool(int corePoolSize):调度线程池,支持定时任务或周期性任务。

方法二:使用 ThreadPoolExecutor 自定义线程池

Java 的 ThreadPoolExecutor 提供了更高级的自定义线程池选项。
示例:自定义线程池

import java.util.concurrent.*;

public class CustomThreadPoolExample {
    public static void main(String[] args) {
        // 自定义线程池
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
                2, // 核心线程数
                4, // 最大线程数
                60, // 空闲线程的存活时间
                TimeUnit.SECONDS, // 时间单位
                new LinkedBlockingQueue<>(2), // 队列容量
                Executors.defaultThreadFactory(), // 线程工厂
                new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
        );

        // 提交任务到线程池
        for (int i = 0; i < 10; i++) {
            int taskId = i;
            threadPool.execute(() -> {
                System.out.println("任务 " + taskId + " 执行线程: " + Thread.currentThread().getName());
                try {
                    Thread.sleep(1000); // 模拟任务执行
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            });
        }

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

参数说明

    核心线程数 (corePoolSize):线程池中始终存活的线程数。
    最大线程数 (maximumPoolSize):线程池允许的最大线程数。
    空闲线程存活时间 (keepAliveTime):当线程数超过核心线程数时,空闲线程存活的时间。
    任务队列 (BlockingQueue):存放等待执行的任务,例如:
        ArrayBlockingQueue:有界队列。
        LinkedBlockingQueue:无界队列。
    线程工厂 (ThreadFactory):用于创建线程的工厂。
    拒绝策略 (RejectedExecutionHandler):当线程池任务队列已满时的处理策略,例如:
        AbortPolicy:抛出异常。
        CallerRunsPolicy:调用线程执行任务。
        DiscardPolicy:丢弃任务,不抛出异常。
        DiscardOldestPolicy:丢弃队列中最旧的任务。

方法三:完全手动实现线程池

如果想手动实现线程池,可以通过创建一个任务队列和一组工作线程来实现。
示例:手动实现线程池

import java.util.LinkedList;
import java.util.Queue;

class CustomThreadPool {
    private final Queue<Runnable> taskQueue = new LinkedList<>();
    private final Thread[] workerThreads;
    private volatile boolean isShutdown = false;

    public CustomThreadPool(int numThreads) {
        workerThreads = new Thread[numThreads];
        for (int i = 0; i < numThreads; i++) {
            workerThreads[i] = new Worker();
            workerThreads[i].start();
        }
    }

    public synchronized void submit(Runnable task) {
        if (isShutdown) {
            throw new IllegalStateException("线程池已关闭");
        }
        taskQueue.offer(task);
        notify(); // 通知工作线程
    }

    public synchronized void shutdown() {
        isShutdown = true;
        notifyAll(); // 通知所有线程退出
    }

    private class Worker extends Thread {
        public void run() {
            while (true) {
                Runnable task;
                synchronized (CustomThreadPool.this) {
                    while (taskQueue.isEmpty() && !isShutdown) {
                        try {
                            CustomThreadPool.this.wait();
                        } catch (InterruptedException e) {
                            Thread.currentThread().interrupt();
                            return;
                        }
                    }
                    if (isShutdown && taskQueue.isEmpty()) {
                        return;
                    }
                    task = taskQueue.poll();
                }
                try {
                    task.run();
                } catch (RuntimeException e) {
                    System.err.println("任务执行异常: " + e.getMessage());
                }
            }
        }
    }
}

public class ManualThreadPoolExample {
    public static void main(String[] args) {
        CustomThreadPool threadPool = new CustomThreadPool(3);

        // 提交任务
        for (int i = 0; i < 10; i++) {
            int taskId = i;
            threadPool.submit(() -> {
                System.out.println("任务 " + taskId + " 执行线程: " + Thread.currentThread().getName());
                try {
                    Thread.sleep(1000); // 模拟任务执行
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            });
        }

        threadPool.shutdown();
    }
}

总结

    ExecutorService 和 ThreadPoolExecutor 是推荐的线程池实现方式,功能强大且易用。
    自定义线程池:适合需要特殊行为的场景,但需要小心管理并发和资源。
    调优建议:
        根据任务特点调整核心线程数和队列大小。
        使用合理的拒绝策略处理超载任务。

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941VX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941VX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941VX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288

https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288

https://818ps.com/muban/oubosiwangVXa9685288_1.html

https://818ps.com/muban/oubosiwanghezuoVXa9685288_1.html

https://818ps.com/muban/oubosiwangbaoshaVXa9685288_1.html

https://818ps.com/muban/oubosiwangcaokongVXa9685288_1.html

https://818ps.com/muban/oubojiawangVXa9685288_1.html

https://818ps.com/muban/oubojiawanghezuoVXa9685288_1.html

https://818ps.com/muban/oubojiawangbaoshaVXa9685288_1.html

https://818ps.com/muban/oubojiawangyibiyiVXa9685288_1.html

https://818ps.com/muban/oubobaoshawangVXa9685288_1.html

https://818ps.com/muban/oubobaoshamaifenVXa9685288_1.html

https://818ps.com/muban/oubobaoshawanghezuoVXa9685288_1.html

https://818ps.com/muban/oubo1bi1VXa9685288_1.html

https://818ps.com/muban/ouboyibiyiVXa9685288_1.html

https://818ps.com/muban/oubo1bi1siwangVXa9685288_1.html

https://818ps.com/muban/oubo1bi1jiawangVXa9685288_1.html

https://818ps.com/muban/ouboyibiyihezuoVXa9685288_1.html

https://818ps.com/muban/yaxingsiwangVXa9685288_1.html

https://818ps.com/muban/yaxingsiwanghezuoVXa9685288_1.html

https://818ps.com/muban/yaxingsiwangbaoshaVXa9685288_1.html

https://818ps.com/muban/yaxingsiwangcaokongVXa9685288_1.html

https://818ps.com/muban/yaxingjiawangVXa9685288_1.html

https://818ps.com/muban/yaxingjiawanghezuoVXa9685288_1.html

https://818ps.com/muban/yaxingjiawangbaoshaVXa9685288_1.html

https://818ps.com/muban/yaxingjiawangyibiyiVXa9685288_1.html

https://818ps.com/muban/yaxingbaoshawangVXa9685288_1.html

https://818ps.com/muban/yaxingbaoshamaifenVXa9685288_1.html

https://818ps.com/muban/yaxingbaoshawanghezuoVXa9685288_1.html

https://818ps.com/muban/yaxing1bi1VXa9685288_1.html

https://818ps.com/muban/yaxingyibiyiVXa9685288_1.html

https://818ps.com/muban/yaxing1bi1siwangVXa9685288_1.html

https://818ps.com/muban/yaxing1bi1jiawangVXa9685288_1.html

https://818ps.com/muban/yaxingyibiyihezuoVXa9685288_1.html

https://818ps.com/muban/huanqiu360siwangVXa9685288_1.html

https://818ps.com/muban/huanqiu360siwanghezuoVXa9685288_1.html

https://818ps.com/muban/huanqiu360siwangbaoshaVXa9685288_1.html

https://818ps.com/muban/huanqiu360siwangcaokongVXa9685288_1.html

https://818ps.com/muban/huanqiu360jiawangVXa9685288_1.html

https://818ps.com/muban/huanqiu360jiawanghezuoVXa9685288_1.html

https://818ps.com/muban/huanqiu360jiawangbaoshaVXa9685288_1.html

https://818ps.com/muban/huanqiu360jiawangyibiyiVXa9685288_1.html

https://818ps.com/muban/huanqiu360baoshawangVXa9685288_1.html

https://818ps.com/muban/huanqiu360baoshamaifenVXa9685288_1.html

https://818ps.com/muban/huanqiu360baoshawanghezuoVXa9685288_1.html

https://818ps.com/muban/huanqiu3601bi1VXa9685288_1.html

https://818ps.com/muban/huanqiu360yibiyiVXa9685288_1.html

https://818ps.com/muban/huanqiu3601bi1siwangVXa9685288_1.html

https://818ps.com/muban/huanqiu3601bi1jiawangVXa9685288_1.html

https://818ps.com/muban/huanqiu360yibiyihezuoVXa9685288_1.html

https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f71c97a53572b6/qs

https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f77405a53572b6/qs

https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f77405f166a9e4/qs

https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f71c9703l63l33l3047fa37/qs

https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f7740503l63l33l3047fa37/qs

https://www.clzg.cn/user/795764.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3051217/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    589
  • 访问量
    602970