线程池的学习

1.概念:

线程池是一种多线程处理形式(这个名字就很形象一个聚集了很多线程的池子),它在创建之初就建造了几个主用线程,当有任务的时候,从池中取出一个空闲线程处理任务,其优点就是任务完成后线程不会被销毁,而是返回池中等待下一个任务。

优点:

  1. 降低资源消耗:避免频繁创建和销毁线程(这些操作开销较大),从而节省系统资源。

  2. 提高响应速度:任务到达时,无需等待线程创建,直接由现有线程执行。

  3. 提高线程的可管理性:线程是稀缺资源,线程池可以统一分配、调优和监控,防止因无限制创建线程导致系统崩溃。

  4. 提供更多功能:如定时执行、任务队列溢出策略、统计信息等

2.java的线程池:

核心接口: ExecutorService 常用实现类: ThreadPoolExecutor 工具类: Executors (提供常见
配置的线程池,如 newFixedThreadPool 、 newCachedThreadPool 、 newSingleThreadExecutor
等)

3.核心组成部分

  • 工作线程:池中预先创建的线程,反复循环获取并执行任务。

  • 任务队列:用于存放待执行的任务,当线程空闲时从队列中取任务。

  • 管理组件:负责线程的创建、销毁、数量控制、任务分配等。

简单的代码展示

复制代码
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPooldemo {
    static class SimpleTask implements Runnable{
        private final int taskId;
        public SimpleTask(int id){this.taskId=id;}
        @Override
        public void run() {
            String threadName= Thread.currentThread().getName();
            System.out.println("任务"+taskId+"正在由"+threadName+"执行");
            try{
                Thread.sleep(500);
            }catch (InterruptedException e){
                //把中断标志设为 true 就是用一个布尔值"记录"了'这个线程被中断过'这一事实,
                // 但并没有记录异常对象的详细信息
                Thread.currentThread().interrupt();
            }
            System.out.println("任务"+taskId+"在"+threadName+"执行完毕");
        }

        public static void main(String[] args) {
            ExecutorService threadPool= Executors.newFixedThreadPool(3);
            for(int i=1;i<=10;i++){
                threadPool.execute(new SimpleTask(i));
            }
            threadPool.shutdown();
            System.out.println("所有任务已完成");
        }
    }
}

这份代码简单展示了 线程池处理任务的过程,线程接到任务就执行,执行完不销毁,等待下一个任务的到来

抛出异常那解释一下:抛出 InterruptedException 时 JVM 会清空中断标志,catch 里重新设置标志是为了保留中断信息,之后线程是否继续运行由程序员写的代码决定(可以继续,也可以退出),所以这里主要是通知的作用

相关推荐
通信小呆呆3 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick3 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee3 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn863 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e3 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨3 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
cqbzcsq4 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan4 天前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
guslegend4 天前
理论学习:什么是 Coding Agent?
学习
自传.4 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding