线程池——简单介绍与使用

一、什么是线程池

线程池(Thread Pool)是一种并发编程中常用的技术,用于管理和重用线程。它由线程池管理器、工作队列和线程池线程组成。

虽然创建/销毁线程的开销相较于进程已经很小,但是想要进一步减少创建/销毁进程的开销,就需要用到进程池。

实际上,进程池就是在应用程序启动时创建多个线程,并将这些线程存放在线程池中。需要执行任务时,从线程池中获取一个空闲的线程,将任务分配给线程执行。任务执行完以后,将线程返还给线程池,从而实现线程的复用。

二、线程池的参数
  1. int corePoolSize:核心线程数

  2. int maximumPoolSize:最大线程数(包括核心线程数)

  3. long keepAliveTime:最长空闲时间

  4. TimeUnit:时间的单位

  5. BlockingQueue<Runnable> workQueue:阻塞队列(任务队列),用来存放线程池中的任务,可以根据需求灵活选择不同的队列

  6. ThreadFactory threadFactory:线程工厂的体现

  7. RejectedExecutionHandler handler:线程池的拒绝策略

三、线程池的工作流程

第一步:有任务需要调用线程时,线程池先检查是否有空闲线程。如果有,则将任务分配给空闲线程,否则继续下一步

第二步:如果线程池中线程的数量还没有到达最大的限制,线程池就会创建一个新的线程,并将任务分配各线程

第三步:如果线程数量已经达到了最大限制,则将任务放入阻塞队列中等待执行

第四步:当线程池中的线程执行完任务后,会从阻塞队列中获取下一个任务

四、使用Executors 创建常见的线程池
java 复制代码
//创建线程池,限制最大线程数量为5
ExecutorService pool = Executors.newFixedThreadPool(5);
//将任务提交给线程池
pool.submit(new Runnable() {
    @Override
    public void run() {
        System.out.println("hello");
   }
});
//关闭线程池
pool.shutdown();
相关推荐
anew___7 分钟前
《从零手写操作系统 (30):环境变量与进程上下文——export/unset与继承语义》
java·开发语言·网络·jvm·算法
Mikko72 小时前
JVM 线上排查实战(六):JFR 怎么用?JDK 8 要不要加 UnlockCommercialFeatures、jfr 命令在哪、录的文件为什么读不了
java·运维·jvm·后端
rannn_1114 小时前
【Java面试题】高频面试题1|Java 后端、MySQL、Redis 与 RAG 面试整理
java·jvm·数据库·后端·面试
学逆向的4 小时前
远程线程注入
开发语言·jvm·网络安全·win32
Mikko74 小时前
JVM 线上排查实战(七):jps 看不到进程、jstack 报不允许的操作怎么办?attach 失败的六种情况实测
java·运维·jvm·后端
且从容.5 小时前
JS篇-----
java·javascript·jvm
xiaoqiMikko20 小时前
JVM 线上排查实战(七):jps 看不见它、jstack 连不上它,可它明明活得好好的
java·jvm
用户0942485680321 小时前
第25章:Java虚拟线程(Project Loom)实战与调度协作
java·jvm
wuminyu21 小时前
ForkJoinPool内部WorkQueue的Lock-Free数组操作以及并发任务窃取原理剖析
java·linux·c语言·jvm·c++
墨天梦1 天前
B10_文件SharedPreferences与SQLite
jvm·数据库·sqlite