码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 线程池介绍及用法


    一、概念:

    提供一组线程,让这些线程来执行各个任务,每执行一个任务便会用一个线程。线程池可以便于重复利用线程、便于统一管理线程

    二、jdk提供的线程池api:

    1、ExecutorService:

    真正的线程池接口,有子类ThreadPoolExecutor

    2、Executors:

    工具类、工厂类。用于创建各种不同类型的线程池(定长、单一、缓存、定时及周期性),指向给ExecutorService。底层都是对ThreadPoolExecutor的构造方法进行封装。

    详情见:https://blog.csdn.net/csucsgoat/article/details/124139094

    三、ThreadPoolExecutor

    1、五个核心构造参数

    /**
     * corePoolSize    核心线程数(线程池刚实例化时就初始化的线程数)
     * maximumPoolSize 线程池中允许的最大线程数量
     * keepAliveTime   非核心线程处于空间状态存在时间
     * unit            keepAliveTime 的时间单位
     * workQueue       用来储存等待执行任务的队列
     */
    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2、常用的执行命令

    void execute(Runnable command);  //参数是Runnable ,无返回值
    
    Future<?> submit(Runnable task);  //参数可以是Runnable、Callable,有返回值
    
    • 1
    • 2
    • 3

    3、常用的关闭命令

    如果使用的线程池核心线程数不为0,建议在使用完后将线程池关闭。因为核心线程会占用内存资源

    //用此方法后继续提交新任务会抛异常,等待队列中的任务任然继续执行,正在执行的任务不会被中断
    void shutdown();  
    
    //用此方法后继续提交新任务会抛异常,等待队列中的任务不会继续执行并且队列中没执行的任务会返回给list,正在执行的任务会被中断
    List<Runnable> shutdownNow();  
    
    • 1
    • 2
    • 3
    • 4
    • 5

    详情见:https://blog.csdn.net/qq_36691683/article/details/84856516

    四、线程池工作流程

    在这里插入图片描述

    五、简单代码样例

    public String testExecutor() throws InterruptedException {
    
        ExecutorService service = new ThreadPoolExecutor(
                100,
                150,
                0L,
                TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<>(20480000)
        );
        CountDownLatch cdl = new CountDownLatch(100);
    
        for (int i=0;i<100;i++){
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    //执行业务逻辑
    
                    System.err.println("线程"+Thread.currentThread().getName()+"执行完");
    
                    //计数器递减
                    cdl.countDown();
                }
            };
    
    
            service.execute(runnable);
        }
    
    
        //线程执行完后再执行主线程
        cdl.await();
    
        //关闭线程池释放资源
        service.shutdown();
    
        return "ok";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    l8-d10 TCP协议是如何实现可靠传输的
    程序员需要知道的地理知识
    探索Linux内核参数的妙用:深入理解配置,打造高效运行环境
    CN考研真题知识点二轮归纳(5)
    bukku ctf(刷题2)
    基于JAVA校园活动管理计算机毕业设计源码+数据库+lw文档+系统+部署
    Citus 分布式 PostgreSQL 集群 - SQL Reference(创建和修改分布式表 DDL)
    多线程-- 原子访问和atomic原子操作类实现原理
    FPGA实战小项目2
    聊聊不是产品经理的程序员如何做产品经理
  • 原文地址:https://blog.csdn.net/qq_38639813/article/details/126845568
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号