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


相关推荐

  • WPF Visifire图表控件使用基础

    WPF Visifire图表控件使用基础https://www.cnblogs.com/wyuan/archive/2012/07/22/WPF.html引言:  由于项目中需要使用Visifire所以自己就写了一些demo,大家一起共享!基础Visifire图表的展示1.Visifire的创建需要引用的DLL包【WPFToolkit.dll;WPFVisifire.Charts;WPFVisifire.Gauges(这个以后会用到)】2

    2022年7月21日
    12
  • 2021必看!java电子书合集,值得收藏![通俗易懂]

    2021必看!java电子书合集,值得收藏![通俗易懂]正文作为后端开发,日常操作数据库最常用的是写操作和读操作。读操作我们下边会讲,这个分类里我们主要来看看写操作时为什么会导致SQL变慢。刷脏页脏页的定义是这样的:内存数据页和磁盘数据页不一致时,那么称这个内存数据页为脏页。那为什么会出现脏页,刷脏页又怎么会导致SQL变慢呢?那就需要我们来看看写操作时的流程是什么样的。对于一条写操作的SQL来说,执行的过程中涉及到写日志,内存及同步磁盘这几种情况。这里要提到一个日志文件,那就是redolog,位于存储引擎层,用来存储物理日志。在写操

    2022年7月9日
    25
  • js生成二维码的几种方法_html怎么生成二维码

    js生成二维码的几种方法_html怎么生成二维码一:arale-qrcodearale-qrcodeGitHub路径npmiarale-qrcode<html><body> <divid=”share_tools”></div><scriptsrc=”qrcode.min.js”></script></body>…

    2022年10月18日
    2
  • kafka集群环境搭建

    kafka集群环境搭建kafka集群测试环境搭建全记录。

    2022年5月22日
    36
  • PROXY SERVER 代理服务器[通俗易懂]

    Proxy是什么呢,是代理。普通的因特网访问是一个典型的客户机与服务器结构:用户利用计算机上的客户端程序,如浏览器发出请求,远端WWW服务器程序响应请求并提供相应的数据。而Proxy处于客户机与服务器之间,对于服务器来说,Proxy是客户机,Proxy提出请求,服务器响应;对于客户机来说,Proxy是服务器,它接受客户机的请求,并将服务器上传来的数据转给客户机。它的作用很象现实生活中的代理服务商…

    2022年4月18日
    43
  • dom4j和jaxp解析工具的

    dom4j和jaxp解析工具的

    2021年12月4日
    31

发表回复

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

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