1.什么是线程池?为什么要使用线程池

1.什么是线程池?为什么要使用线程池线程池作为java开发者必备技能,在日常开发中十分常见,所以从这一节开始我们介绍线程池。今天的内容有两点,第一点,为什么要使用线程池?第二点,什么是线程池?首先来看第一点,为什么要使用线程池?在

大家好,又见面了,我是你们的朋友全栈君。

线程池作为java开发者必备技能,在日常开发中十分常见,所以从这一节开始我们介绍线程池。

今天的内容有两点,第一点,为什么要使用线程池?第二点,什么是线程池?

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

 

首先来看第一点,为什么要使用线程池?

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

在没有使用线程池之前,我们是如何执行任务的?这是一个任务,任务内容是输出当前线程名称,接下来我们来执行该任务。

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

首先将任务创建出来,然后创建一个线程,接着将任务传递给线程,紧接着启动线程,任务就开始执行了。程序输出thread-0,

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 <span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

我们发现一个线程它只能执行一个任务,不能连续执行任务。例如这里有三个任务,它没法连续执行,没有上述这种写法

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

只能在创建两个线程去执行另外两个任务,程序分别输出三个线程的名称,这些线程执行。完任务以后就销毁了,如果再有任务时,则需要重新创建线程,这也暴露了一个问题,线程不能复用。

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 <span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

 

 

重复创建和销毁线程耗时耗资源,如果能复用就好了,复用的好处就是省时省资源。

下面我们就来看看线程池是如何执行任务的,还是这三个任务创建只有一个线程的线程池,

这个线程池里面只有一个线程,这个不是重点,重点是他里面的这个线程可以复用调用他的execute的方法,将需要执行的任务提交给线程池,任务提交以后,线程池会自动分配线程去执行提交过来的任务,最后记得调用它的shutdown方法关闭线程池,当线程池中的任务全部执行完毕以后,线程池则会关闭。线程池关闭以后无法再提交任务,程序输出三个名称一样的线程,说明一个县城执行了三个任务。足以证明线程得到复用。

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

 

 

 

对比线程,线程池的好处有很多,这里列举三个,

第一个,降低资源消耗,通过重复利用已创建的线程,降低线程创建和销毁造成的消耗。

第二个,提高响应速度,当有任务时,任务可以不需要等待线程创建就能立即执行。

第三个,提高现成的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

什么是线程池?

介绍完为什么要使用线程池,接下来我们再来看看什么是线程池。线程池是一种基于池化思想管理现成的工具。

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

在没有现成值之前,当有任务需要执行时,

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

我们会创建一个线程,

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

然后将任务传递给线程,

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

并且一个线程只能执行一个任务,如果还有任务,我们就只能再创建一个线程去执行它,

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 <span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

当任务执行完时,线程就销毁了。

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

重复创建和销毁线程是一件很耗时耗资源的是,如果线程能复用,那么就减少很多不必要的消耗,于是线程池就孕而生了。

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

事先将线程创建后,当有任务需要执行时提交给线程池,

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

线程池分配线程去执行,

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

有再多的任务也不怕。线程池中的线程能复用,

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

执行完一个任务再接着执行其他任务。

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 <span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

当所有任务都执行完时,

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

我们可以选择关闭线程池,

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

也可以选择等待接收任务。

线程池的英文叫做threadpool,thread线程的意思,Pool池的意思,Threadpool线程池,这是线程池的核心UML类图。

<span role="heading" aria-level="2">1.什么是线程池?为什么要使用线程池

 

 

 

 

这里面的每一个元素后续章节都会讲到,最后总结一下本节的内容,本节介绍了为什么要使用线程池和什么是线程池,这里就不再赘述了。在实际开发中,线程池用的非常多,希望大家可以掌握它。下一节我们将介绍如何创建线程池,

本节的代码地址如下,大家有需要的话可以前去查看。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155725.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland 激活address破解方法

    goland 激活address破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    98
  • ❤️爆肝十二万字《python从零到精通教程》,从零教你变大佬❤️(建议收藏)[通俗易懂]

    ❤️爆肝十二万字《python从零到精通教程》,从零教你变大佬❤️(建议收藏)[通俗易懂]文章目录强烈推荐系列教程,建议学起来!!一.pycharm下载安装二.python下载安装三.pycharm上配置python四.配置镜像源让你下载嗖嗖的快4.1pycharm内部配置4.2手动添加镜像源4.3永久配置镜像源五.插件安装(比如汉化?)5.1自动补码神器第一款5.2汉化pycharm5.3其它插件六.美女背景七.自定义脚本开头八、这个前言一定要看九、python入门十、python缩进十一、Python注释1.单行注释2.多行注释十二、Python变量1.变量定义理解2.变量名命名3.分

    2022年6月9日
    29
  • Dijkstra算法时间复杂度分析[通俗易懂]

    Dijkstra算法时间复杂度分析[通俗易懂]文章目录Dijkstra算法的思路与关键点Dijkstra算法的时间复杂度之前一直默认Dijkstra算法时间复杂度为o(n2)o(n^{2})o(n2),没有思考过具体的时间复杂度,今天把这个弄清楚。Dijkstra算法的思路与关键点思路:广度优先+松弛所有点分为两个集合SSS和TTT,SSS最开始只包括源点sss,剩余点都位于TTT。SSS集合表示已经计算出最短路径的点集合,TTT表示尚未计算出最短路径的点集合。每次从集合TTT中选出一个与集合SSS距离最短的点vvv,将点vvv加

    2022年5月15日
    40
  • 移除word文档的域代码 remove all field codes of word[通俗易懂]

    移除word文档的域代码 remove all field codes of word[通俗易懂]去除word中因使用mendeley或endnote等文献管理软件而产生的域代码。网上很多说使用CTRL+SHIFT+F9,但亲测不行,可能是软件版本问题。使用以下方法解决:CTRL+A全选文章;CTRL+6去除全文域代码。参考:https://community.endnote.com/t5/EndNote-Styles-Filters-and/Removing-field-codes-adjusts-spacing-in-Word-document/td-p/152892http

    2022年6月10日
    142
  • 【新星计划】你真的了解计算机病毒吗?[通俗易懂]

    【新星计划】你真的了解计算机病毒吗?[通俗易懂]常常听说计算机病毒,但你真的了解它们吗?你知道它们长什么样子,如何抵御吗?今天由我来带你深入了解一下。

    2022年5月20日
    34
  • (20211206更新)ubuntu18.04 安装Python3.8.3、jupyter notebook远程连接配置、虚拟环境搭建。及torch、tensorflow成功下载[通俗易懂]

    (20211206更新)ubuntu18.04 安装Python3.8.3、jupyter notebook远程连接配置、虚拟环境搭建。及torch、tensorflow成功下载[通俗易懂]最近搞了一个低配云服务器,就瞎整。多次踩坑后,进行记录问题之前有试过删除软链接、进行替换#删除软连接sudorm-rf/usr/bin/python3sudorm-rf/usr/bin/pip3#新建软连接sudoln-s/usr/local/python3/bin/python3.8/usr/bin/python3sudoln-s/usr/local/python3/bin/pip3.8/usr/bin/pip3但是吧,后续的pipinstall会出

    2022年6月23日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号