简单了解线程池

线程池

  • 线程池的概念
    • 线程池的优势
  • 线程池属性介绍
  • 线程池的使用
  • 简单实现线程池
  • 总结


线程池的概念

线程池(ThreadPoolExecutor) 顾名思义,在一个“池”中存放多个线程。
与常量池、数据库连接池等思想是一样的,为的都是提高效率。
我们已经领教了多线程的优势,使用线程池也是为了能够扩大线程所具备的优势。通过并发编程、轻量级、频繁创建销毁的优势。

线程池的优势

在线程中进行创建和销毁需要同时调用用户态和内核态才能完成工作。而线程池的创建销毁只需要用户态即可完成操作,不需要与内核态进行交互。这在一定程度上提高了效率。


线程池属性介绍

在线程池的构造方法中,我们可以看到有以下几个参数:corePoolSize
maximumPoolSIze
keppAliveTime
TimeUnit
BlockingQueue
ThreadFactory
RejectExecutionHandler
在这里插入图片描述

  1. corePoolSize:核心线程数。在一个线程池刚被创建出来之后,首先创建的线程数量为核心线程数。如果核心线程足以完成任务,那么就不再添加多余的线程。如果任务过多,核心线程处理不过来,那么线程池就会自动创建出新的线程来一同解决这些任务。当任务解决完成之后,非核心线程就会被回收掉。
  2. maximumPoolSize:最大线程数。在核心线程数中我们知道,问题处理不过来以后机会创建出新的线程一同解决问题,但是线程总数量不能大于最大线程数。
  3. keepAliveTime:允许存活时间。在这里指的是非核心线程允许空闲的最大时间,当线程池空闲超过这一段时间之后,非核心线程就会被回收掉。
  4. TimeUnit:时间单位,与keepAliveTime相配合,假设keepAliveTime = 1,TImeUnit = Day,即非核心线程存活时间1天。
  5. BlockingQueue:任务队列。在线程池中使用阻塞队列存储需要完成的任务。线程池会提供submit方法,让其他线程把任务交给线程池。
  6. ThreadFactory:线程工厂。用来创建线程的工厂类。
  7. RejectExecutionHandler:拒绝策略。在拒绝策略中一共分为四种方式
    (1)AbortPolicy:线程池直接抛出异常。
    (2)CallerRunsPolicy:线程池任务已满,让添加任务的线程本身执行这一任务。
    (3)DiscardOladestPolicy:线程丢弃掉最老的任务,让新的任务在队列中排队。
    (4)DiscardPolicy:丢弃掉新添加进来的任务,不予理会。

线程池的使用

标准库中线程池使用方法过于繁琐,于是有了线程池的工厂类Executors,通过该工厂类能够提升代码的效率,也更便捷的使用。

		//1.根据任务数量自动扩容
        ExecutorService service =  Executors.newCachedThreadPool();
        //2.固定线程数量
        Executors.newFixedThreadPool(3);
        //3.创建只包含单线程的线程池
        Executors.newSingleThreadExecutor();
        //4.创建一个固定线程个数,但是任务超时执行的线程池
        Executors.newScheduledThreadPool(4);

为线程池添加任务的submit方法也包含在其中

service.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello submit");
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });

在线程池工作完成之后,线程是不会被回收掉的。仍然处于等待状态。

简单实现线程池

简单实现一个线程池所需要的基本属性有:阻塞队列存放任务,线程数量暂时固定,submit方法,下面代码简单作为参考。
所创建的线程thread通过while循环不断获取queue中的任务,如果没有任务就阻塞等待。submit为阻塞队列添加任务。

class MyThreadPool {
    private BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(1000);
    public MyThreadPool(int n) {
        for (int i = 0; i < n; i++) {
            Thread thread = new Thread(()-> {
                while (true) {
                    try {
                        Runnable runnable = queue.take();
                        runnable.run();
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            });
            thread.start();
        }
    }

    public void submit(Runnable runnable) throws InterruptedException {
        queue.put(runnable);
    }
}

总结

线程池是一种很实用的类,可以极大的提高效率,同时也具有很强的灵活性,值得学习。
线程池源码☞线程池

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/801023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python关于excel常用函数(pandas篇)

iterrows函数&#xff1a; Pandas的基础数据结构可以分为两种&#xff1a;DataFrame和Series。不同于Series的是&#xff0c;Dataframe不仅有行索引还有列索引 。df.iterrows( )函数&#xff1a;可以返回所有的行索引&#xff0c;以及该行的所有内容。 pd.read_excel&#xf…

印尼语翻译通:AI驱动的智能翻译与语言学习助手

在这个多元文化交织的世界中&#xff0c;语言是连接我们的桥梁。印尼语翻译通&#xff0c;一款专为打破语言障碍而生的智能翻译软件&#xff0c;让您与印尼语的世界轻松接轨。无论是商务出差、学术研究&#xff0c;还是探索印尼丰富的文化遗产&#xff0c;印尼语翻译通都是您的…

材料学本科毕业6年自学Python转行AI行业,真的值得吗?

一转眼&#xff0c;步入中年。回头看看&#xff0c;这六年多的时间变化实在是太大了。换专业&#xff0c;换赛道&#xff0c;从基层做到总监&#xff0c;最终放弃管理岗位投身技术&#xff0c;这一切都与学生时代的规划相去甚远。 从大学入学到2018年转行之前&#xff0c;我的…

springboot老年慢性病药物管理系统-计算机毕业设计源码70568

目录 摘要 Abstract 第一章 绪论 1.1 选题背景及意义 1.2 国内外研究现状 1.3 研究方法 第二章 相关技术介绍 2.1 MySQL简介 2.2 Java编程语言 2.3 B/S模式 2.4 springboot框架 第三章 老年慢性病药物管理系统 系统分析 3.1 系统目标 3.2 系统可行性分析 3.2.1 技…

SIP消息结构详解

SIP协议的消息由三部分构成&#xff0c;分别是起始行&#xff08;请求行状态行)、消息头和消息体&#xff08;正文&#xff09; 一&#xff0e;起始行 1. 请求消息起始行 起始行&#xff1a;由方法名、请求URI和协议版本组成&#xff0c;自身内部用逗号分割&#xff0c;三者之…

小试牛刀-Telebot区块链游戏机器人

目录 1.编写目的 2.实现功能 2.1 Wallet功能 2.2 游戏功能 2.3 提出功能 2.4 辅助功能 3.功能实现详解 3.1 wallet功能 3.2 游戏功能 3.3 提出功能 3.4 辅助功能 4.测试视频 Welcome to Code Blocks blog 本篇文章主要介绍了 [Telebot区块链游戏机器人] ❤博主…

Vue3 前置知识

1. Vue3 简介 2020年9月18日&#xff0c;Vue.js发布版3.8版本&#xff0c;代号&#xff1a;one Piece(海贼王)经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者官方发版地址&#xff1a;Release v3.0.0 One Piecevuejs/,core截止2023年10月&#xff0c;最新的公开版…

nginx基本概念和安装

一. 简介 1.1 是什么 nginx是一个高性能的HTTP和反向代理web服务器&#xff0c;是一款轻量级的Web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器&#xff0c;在BSD-like协议下发行&#xff0c;特点是占有内存少&#xff0c;并发能力强。ngnix专为性能优化而开发&#…

【TES807】 基于XCKU115 FPGA的双FMC接口万兆光纤传输信号处理平台

板卡概述 TES807是一款基于千兆或者万兆以太网传输的双FMC接口信号处理平台。该平台采用XILINX的Kintex UltraSacle系列FPGA&#xff1a;XCKU115-2FLVF1924I作为主处理器&#xff0c;FPGA外挂两组72位DDR4 SDRAM&#xff0c;用来实现超大容量数据缓存&#xff0c;DDR4的最高数据…

【软件测试】编写测试用例篇

前面部分主要是编写测试用例的方法和方向&#xff0c;后面一部分是编写出具体的测试用例 目录 什么是测试用例 1.设计测试用例的万能公式 1.1.从思维出发 1.2.万能公式 1.3.弱网测试 1.4.安装与卸载测试 2.设计测试用例的方法 2.1.基于需求的设计方法 2.2.等价类 2.3…

【Git分支管理】分支合并冲突及其解决

目录 0.合并冲突 1.创建和切换dev1 ​2.dev1 bbb on dev branch ​3.master ccc on dev branch 4.dev1和master合并冲突 5.合并冲突解决 ​6.git log查看合并流程图 先提交再合并 0.合并冲突 在使用git进行合并操作的时候&#xff0c;在合并两个分支的时候就有可能出…

【EXCELL技巧篇】使用Excel公式,获取当前 Excel的Sheet页的名字

【通知】&#xff1a; 正式跟大家说个难过的消息&#xff0c;本来在「中国朝代史」结束后&#xff0c;开启的下一个专栏「中国近代史」前面几期做的还好好的&#xff0c;可是今天起正式通知审核不过&#xff0c;因为一些原因。 其实我对于历史这一块我还是很感兴趣的&#xff0…

13、Shell自动化运维编程基础

弋.目录 RHCE板块一、为什么学习和使用Shell编程二、Shell是什么1、shell起源2、查看当前系统支持的shell3、查看当前系统默认shell4、Shell 概念 三、Shell 程序设计语言1、Shell 也是一种脚本语言2、用途 四、如何学好shell1、熟练掌握shell编程基础知识2、建议 五、Shell脚本…

海外媒体投稿:精准定位目标受众!掌握这5个软文代发推广要点

在当今互联网时代&#xff0c;软文代发成为了一种常见的推广手段。要想取得成功&#xff0c;就需要掌握精准定位目标受众这一关键要素。本文将介绍5个软文代发推广要点&#xff0c;帮助读者了解如何更好地利用软文代发来吸引目标受众。 软文代发要点 1. 熟悉目标受众 在进行软…

怎麼使用指紋流覽器Hubstudio促進跨境電商業務?

指紋流覽器是一種基於流覽器指紋技術開發的工具&#xff0c;能夠模擬不同的流覽器環境和指紋資訊&#xff0c;實現多個帳號的同時登錄和管理。此項技術提升了帳號的安全性&#xff0c;同時顯著降低了帳號被封禁的風險。指紋流覽器通常用於隱私保護、安全性增強、多帳號管理、數…

房地产市场2024年展望——深度解读行业趋势

作为一名有十多年经验的地产营销人&#xff0c;对于2024年房地产行业的发展趋势&#xff0c;我认为可以从以下几个方面来探讨&#xff0c;如果觉得对你有帮助&#xff0c;请不吝一个三连&#xff08;赞同喜欢收藏&#xff09; 一、市场调整与分化加剧 在经历了较长时间的市场…

Python excel知识库批量模糊匹配的3种方法实例(fuzzywuzzy\Gensim)

前言 当然&#xff0c;基于排序的模糊匹配&#xff08;类似于Excel的VLOOKUP函数的模糊匹配模式&#xff09;也属于模糊匹配的范畴&#xff0c;但那种过于简单&#xff0c;不是本文讨论的范畴。 本文主要讨论的是以公司名称或地址为主的字符串的模糊匹配。 使用编辑距离算法进…

ATFX集团高层受到中国驻约旦大使馆经商处接见

全球领先的差价合约经纪商ATFX宣布&#xff0c;在全球扩张、深耕区域市场与本地化运营的战略指导下&#xff0c;公司深耕区域市场方面取得显著进展&#xff0c;在中东市场&#xff0c;其高层更是获得了中国驻约旦大使馆经商处的特别接见。近日&#xff0c;在中国驻约旦哈希姆王…

【计算机网络】学习指南及导论

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️计算机网络】 文章目录 前言我们为什么要学计算机网络&#xff1f;计算机网络概述计算机网络的分类按交换技术分类按使用者分类按传输介质分类按覆盖网络分类按覆盖网络分类 局域网的连接方式有线连接…

更新:彩虹云商城系统 自助下单免授权无后门源码(修复完整版)

源码简介&#xff1a; 最新更新彩虹云商城系统&#xff0c;自助下单免授权无后门源码&#xff08;修复完整版&#xff09; 自助下单彩虹云商城系统。这玩意儿不简单&#xff0c;它是高效稳定的电商平台&#xff01;免授权源码版本&#xff0c;灵活方便。源码是用PHP语言写的。…