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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 对该信源编二进制香农码_编译原理实验一

    对该信源编二进制香农码_编译原理实验一一、实验目的和任务1.理解信源编码的意义;2.熟悉MATLAB程序设计;3.掌握香农编码的方法及计算机实现;4.对给定信源进行香农编码,并计算编码效率;二、实验原理介绍给定某个信源符号的概率分布,通过以下的步骤进行香农编码:1.信源符号按概率从大到小排列;12…….nppp≥≥≥2.确定满足下列不等式的整数码长iK为()()1iiilbpKl…

    2025年8月30日
    4
  • mac如何卸载python_如何彻底卸载pycharm

    mac如何卸载python_如何彻底卸载pycharm小编的系统是MacOS10.15.4,之前是去官网下载安装了PyCharm2020.1.2,现在想把它完全卸载了,方法如下:1、打开访达-应用程序,找到PyCharm应用图标,右键移到废纸篓;2、清理缓存、参数以及日志相关配置文件:cd~/Library/Preferences/rm-rfJetBrains/PyCharm2020.1/cd~/Library/Logsrm-rfJetBrains/PyCharm2020.1/cd~/L…

    2022年8月29日
    2
  • jieba库分词代码_怎么下载jieba库

    jieba库分词代码_怎么下载jieba库jieba库概述(jieba是优秀的中文分词第三分库)中文文本需要通过分词获得单个的词语jieba是优秀的中文分词第三方库,需要额外安装jieba库提供三种分词模式,最简单只需要掌握一个函数jieba库的安装(cmd命令行)pipinstalljieba(导入)importjieba(查看版本)jieba.__version__jieba分词的原理(jieba分词依靠…

    2022年9月21日
    3
  • 《MySQL45讲》读书笔记(三):内存数据刷盘机制

    《MySQL45讲》读书笔记(三):内存数据刷盘机制此文为极客时间:MySQL实战45讲的12节的学习笔记一、mysql的刷盘机制而之前提到过,mysql使用了WAL技术,即更新的时候先更新内存中的数据,然后必要的时候再将内存中的数据刷入磁

    2022年8月16日
    5
  • sublime phpcs

    sublime phpcs

    2022年3月2日
    44
  • asp.net专业实习——网上花店系统

    asp.net专业实习——网上花店系统2019.5.2项目适用vs2010直接打开后更改数据库连接字符串即可如果在添加商品遇到报错,多半是输入的字符太多了链接:https://pan.baidu.com/s/1ulU89ogdHKRVGv9ad5Zszw提取码:he88复制这段内容后打开百度网盘手机App,操作更方便哦此项目是用vs2013开发,使用时需要重新配置连接字符串。。如果你的环境是vs20…

    2022年7月21日
    12

发表回复

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

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