创建线程池的几种方式

创建线程池的几种方式

创建线程池的几种方式
(图片来源网络,侵删)

1. 使用 Executors 工厂方法

Executors 类提供了一些工厂方法来创建不同类型的线程池,下面是一些常用的方法:

固定大小的线程池: 使用 Executors.newFixedThreadPool(int nThreads) 创建一个固定大小的线程池。

单线程线程池: 使用 Executors.newSingleThreadExecutor() 创建一个只有一个工作线程的线程池。

缓存线程池: 使用 Executors.newCachedThreadPool() 创建一个可缓存的线程池,如果线程空闲,则会被回收。

调度线程池: 使用 Executors.newScheduledThreadPool(int corePoolSize) 创建一个可以执行延迟任务或周期性任务的线程池。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
    public static void main(String[] args) {
        // 创建固定大小的线程池
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
        
        // 创建单线程线程池
        ExecutorService singleThreadPool = Executors.newSingleThreadExecutor();
        
        // 创建缓存线程池
        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
        
        // 创建调度线程池
        ExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2);
    }
}

2. 使用 ThreadPoolExecutor 构造函数

你也可以通过调用 ThreadPoolExecutor 的构造函数直接创建一个线程池,这允许你更细粒度地控制线程池的行为。

import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class Main {
    public static void main(String[] args) {
        // 创建线程池
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
            2, // 核心线程数
            4, // 最大线程数
            60L, // 空闲线程存活时间
            TimeUnit.SECONDS, // 空闲线程存活时间的单位
            new LinkedBlockingQueue<Runnable>(), // 工作队列
            new ThreadFactoryBuilder().setNameFormat("threadpool%d").build() // 线程工厂
        );
    }
}

3. 使用第三方库

有些第三方库也提供了创建线程池的功能,Google Guava 和 Apache Commons Pool,这些库通常提供了更多的配置选项和额外的功能。

// 使用 Google Guava 创建线程池
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.google.common.util.concurrent.MoreExecutors;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
    public static void main(String[] args) {
        // 创建线程池
        ExecutorService threadPool = MoreExecutors.newDirectExecutorService();
    }
}

4. 使用自定义实现

你也可以自己实现一个线程池,虽然 Java 标准库已经提供了非常完善的线程池实现,但在某些特殊情况下,你可能需要自己实现一个线程池来满足特定的需求。

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;
public class CustomThreadPool {
    private final AtomicInteger threadNumber = new AtomicInteger(1);
    private final LinkedTransferQueue<Runnable> taskQueue = new LinkedTransferQueue<>();
    private final WorkerThread[] threads;
    public CustomThreadPool(int numberOfThreads) {
        threads = new WorkerThread[numberOfThreads];
        for (int i = 0; i < numberOfThreads; i++) {
            threads[i] = new WorkerThread("CustomThreadPool" + threadNumber.getAndIncrement());
            threads[i].start();
        }
    }
    public void execute(Runnable task) {
        taskQueue.offer(task);
    }
    private class WorkerThread extends Thread {
        public WorkerThread(String name) {
            super(name);
        }
        @Override
        public void run() {
            Runnable task;
            while (true) {
                try {
                    task = taskQueue.take();
                    task.run();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/662457.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希新媒体运营
上一篇 2024-05-27 23:39
下一篇 2024-05-27 23:40

相关推荐

  • Java线程池的用法

    Java线程池通过Executor框架实现,主要使用ThreadPoolExecutor或ScheduledThreadPoolExecutor类。创建线程池时需指定核心参数,如线程数、队列类型、拒绝策略等。常用方法包括execute()、submit()和shutdown()。

    2024-07-09
    034
  • Java中的线程池有哪些?

    Java中的线程池主要有四种:FixedThreadPool、SingleThreadExecutor、CachedThreadPool 和 ScheduledThreadPool。FixedThreadPool可重用固定线程数的线程池;SingleThreadExecutor单个线程执行任务的线程池;CachedThreadPool根据需要创建新线程的线程池;ScheduledThreadPool为任务实现延时或定期重复执行功能。

    2024-07-08
    0109
  • java线程池有几种

    Java线程池主要有四种类型,它们分别是:1、FixedThreadPool(固定线程数线程池)2、CachedThreadPool(可缓存线程池)3、ScheduledThreadPool(定时线程池)4、SingleThreadExecutor(单线程执行器)下面是对这四种线程池的详细解释:1. Fixed……

    2024-05-27
    081
  • java线程池类型

    Java线程池主要有四种类型,它们分别是:1、FixedThreadPool(固定线程数的线程池)2、CachedThreadPool(可缓存的线程池)3、ScheduledThreadPool(可调度的线程池)4、SingleThreadPool(单线程的线程池)下面分别介绍这四种线程池的特点和使用场景。1……

    2024-05-26
    086

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入