java创建线程池

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

/**
 * 线程池管理类
 */
public final class ThreadPoolUtil {
    /**
     * 多线程允许最大并发线程数的默认大小
     */
    private static final Integer THREAD_DEFAULT_MAXQUANTITY = 50;

    /**
     * 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
     */
    private static ExecutorService THREADPOOL_DEFAULT = Executors.newFixedThreadPool(THREAD_DEFAULT_MAXQUANTITY);

    /**
     * 获取默认线程池
     * @return
     */
    public static ExecutorService getDefaultPool() {
        return THREADPOOL_DEFAULT;
    }
}

Java 中,创建线程池主要有以下几种方式: 1. **使用 `ThreadPoolExecutor` 自定义创建线程池**:可以通过 `ThreadPoolExecutor` 的构造函数来创建线程池,需要指定核心线程数、最大线程数、空闲线程存活时间、时间单位和任务队列等参数。示例代码如下: ```java import java.util.concurrent.*; public class EagerThreadPoolExample { public static void main(String[] args) { // 创建线程池 ThreadPoolExecutor executor = new ThreadPoolExecutor( 5, // 核心线程数 10, // 最大线程数 60, // 空闲线程存活时间 TimeUnit.SECONDS, new LinkedBlockingQueue<>() ); // 初始化时提前创建所有核心线程 executor.prestartAllCoreThreads(); // 验证活跃线程数 System.out.println("初始化后,活跃线程数: " + executor.getActiveCount()); // 输出: 5 // 提交任务 executor.submit(() -> System.out.println("任务执行")); executor.shutdown(); } } ``` 2. **使用 `Executors` 工厂方法**:`Executors` 类提供了一些静态方法来创建不同类型的线程池,具体如下: - **`FixedThreadPool`(固定大小线程池)**:创建一个固定大小的线程池,所有任务将在固定数量的线程中执行。示例代码如下: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FixedThreadPoolExample { public static void main(String[] args) { ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5); // 提交任务 fixedThreadPool.submit(() -> System.out.println("任务执行")); fixedThreadPool.shutdown(); } } ``` - **`CachedThreadPool`(可缓存线程池)**:创建一个可缓存的线程池,如果线程池的大小超过了处理任务所需的线程数量,空闲线程将被回收;如果有新任务提交且没有空闲线程可用,会创建新的线程来执行任务。示例代码如下: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CachedThreadPoolExample { public static void main(String[] args) { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); // 提交任务 cachedThreadPool.submit(() -> System.out.println("任务执行")); cachedThreadPool.shutdown(); } } ``` - **`SingleThreadExecutor`(单线程线程池)**:创建一个单线程的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO、LIFO、优先级)执行。示例代码如下: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SingleThreadExecutorExample { public static void main(String[] args) { ExecutorService singleThreadPool = Executors.newSingleThreadExecutor(); // 提交任务 singleThreadPool.submit(() -> System.out.println("任务执行")); singleThreadPool.shutdown(); } } ``` - **`ScheduledThreadPool`(定时/周期性任务线程池)**:创建一个可以执行定时任务或周期性任务的线程池。示例代码如下: ```java import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ScheduledThreadPoolExample { public static void main(String[] args) { ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); // 延迟 1 秒后执行任务 scheduledThreadPool.schedule(() -> System.out.println("任务执行"), 1, TimeUnit.SECONDS); scheduledThreadPool.shutdown(); } } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值