当前位置: 首页 > news >正文

50-java 线程池的核心主件和核心类

在Java中,ThreadPoolExecutor是线程池的核心类,它在java.util.concurrent包中。Executors是一个工厂类,它提供了一些方便的方法来创建不同类型的线程池。

以下是创建线程池的核心类和方法:

  1. ThreadPoolExecutor

    构造方法:

    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)

  2. 参数说明

    • corePoolSize:线程池中的常驻核心线程数。

    • maximumPoolSize:线程池中允许的最大线程数。

    • keepAliveTime:非核心线程的空闲时间,超时自动终止。

    • unitkeepAliveTime的时间单位

    • workQueue:任务队列,被提交但未被执行的任务。

    • threadFactory:线程工厂,用于创建线程。

    • handler:拒绝策略,当任务太多无法处理时的策略。

Executors:静态方法:

public static ExecutorService newFixedThreadPool(int nThreads)
public static ExecutorService newCachedThreadPool()
public static ExecutorService newSingleThreadExecutor()
// 等等
    • 方法说明:

      • newFixedThreadPool(int nThreads):创建固定大小的线程池。

      • newCachedThreadPool():创建一个可缓存的线程池,调用时创建线程,不使用时回收线程。

      • newSingleThreadExecutor():创建单线程化的线程池,按序执行任务。

以下是一个使用ThreadPoolExecutor的简单示例:

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.Executor;public class ThreadPoolExample {public static void main(String[] args) {BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();ThreadPoolExecutor executor = new ThreadPoolExecutor(4, 8, 10, TimeUnit.SECONDS, queue);for (int i = 0; i < 10; i++) {executor.execute(new RunnableTask());}executor.shutdown(); // 关闭线程池,不再接受新任务,已经提交的任务继续执行完毕}static class RunnableTask implements Runnable {public void run() {// 执行任务的代码System.out.println("Task executed on thread: " + Thread.currentThread().getName());}}
}

以上代码创建了一个ThreadPoolExecutor,并提交了10个简单的任务。线程池的核心线程数为4,最大线程数为8,超过核心线程数的非核心线程空闲时间为10秒。任务执行完毕后,关闭线程池。


http://www.mrgr.cn/news/14379.html

相关文章:

  • 『功能项目』怪物受击后显示受击状态UI【12】
  • Linux 内核源码分析---组播/策略路由选择
  • 【QT】学习笔记:枚举桌面窗口句柄
  • 引号的艺术:用CSS quotes 属性打造个性化引用
  • 大数据技术之 Flume概述、安装(1)
  • C++ | Leetcode C++题解之第378题有序矩阵中第K小的元素
  • Echarts的使用
  • 内容营销专家刘鑫炜:小微企业的你,为什么总做不好内容营销?
  • Pycharm can‘t open file ‘D:\\Program‘: [Errno 2] No such file or directory
  • 如何优雅的使用责任链模式?
  • 浅谈Java Spring Boot
  • 39. 数组中出现次数超过一半的数字
  • 基于 Redis 的 HyperLogLog 实现了 UV 的统计
  • 81、k8s网络配置以及k8s拉取私有仓库
  • R 2火灾温度预测
  • 2024年6月 青少年等级考试机器人实操真题二级
  • blender4.2中安装插件的方式
  • Android NDK 查看动态库的依赖关系
  • MySQL——多表操作(四)(2)带 EXISTS 关键字的子查询
  • Prometheus+exporter+Grafana