前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1.什么是线程池?为什么要使用线程池

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

作者头像
全栈程序员站长
发布2022-09-07 08:44:07
4730
发布2022-09-07 08:44:07
举报
文章被收录于专栏:全栈程序员必看

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

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

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

<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.什么是线程池?为什么要使用线程池

首先将任务创建出来,然后创建一个线程,接着将任务传递给线程,紧接着启动线程,任务就开始执行了。程序输出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.什么是线程池?为什么要使用线程池
<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.什么是线程池?为什么要使用线程池

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先来看第一点,为什么要使用线程池?
  • 什么是线程池?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档