2024年10月线程池是什么?什么是线程池

 更新时间:2024-10-12

  ⑴线程池是什么?什么是线程池

  ⑵创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK.开始,JavaAPI提供了Executor框架让你可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池(一个适合很多生存期短的任务的程序的可扩展线程池。

  ⑶线程池,threadpool,是一种线程使用模式,线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。功能:应用程序可以有多个线程,这些线程在休眠状态中需要耗费大量时间来等待事件发生。其他线程可能进入睡眠状态,并且仅定期被唤醒以轮循更改或更新状态信息,然后再次进入休眠状态。为了简化对这些线程的管理,.框架为每个进程提供了一个线程池,一个线程池有若干个等待操作状态,当一个等待操作完成时,线程池中的辅助线程会执行回调函数。线程池中的线程由系统管理,程序员不需要费力于线程管理,可以集中精力处理应用程序任务。

  ⑷【Java基础】线程池的原理是什么

  ⑸总归为:池化技术---》数据库连接池缓存架构缓存池线程池内存池,连接池,这种思想演变成缓存架构技术---》JDK设计思想有千丝万缕的联系

  ⑹首先我们从最核心的ThreadPoolExecutor类中的方法讲起,然后再讲述它的实现原理,接着给出了它的使用示例,最后讨论了一下如何合理配置线程池的大小。

  ⑺Java中的ThreadPoolExecutor类

  ⑻java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须先了解这个类。下面我们来看一下ThreadPoolExecutor类的具体实现源码。

  ⑼在ThreadPoolExecutor类中提供了四个构造方法:

  ⑽从上面的代码可以得知,ThreadPoolExecutor继承了AbstractExecutorService类,并提供了四个构造器,事实上,通过观察每个构造器的源码具体实现,发现前面三个构造器都是调用的第四个构造器进行的初始化工作。

  ⑾下面解释下一下构造器中各个参数的含义:

  ⑿ArrayBlockingQueue和PriorityBlockingQueue使用较少,一般使用LinkedBlockingQueue和Synchronous。线程池的排队策略与BlockingQueue有关。

  ⒀具体参数的配置与线程池的关系将在下一节讲述。

  ⒁从上面给出的ThreadPoolExecutor类的代码可以知道,ThreadPoolExecutor继承了AbstractExecutorService,我们来看一下AbstractExecutorService的实现:

  ⒂AbstractExecutorService是一个抽象类,它实现了ExecutorService接口。

  ⒃我们接着看ExecutorService接口的实现:

  ⒄而ExecutorService又是继承了Executor接口,我们看一下Executor接口的实现:

  ⒅一:newCachedThreadPool()缓存型池子,先查看池中有没有以前建立的线程,如果有,就reuse,如果没有,就建立一个新的线程加入池中;()缓存型池子,通常用于执行一些生存周期很短的异步型任务;因此一些面向连接的daemon型server中用得不多;()能reuse的线程,必须是timeoutIDLE内的池中线程,缺省timeout是s,超过这个IDLE时长,线程实例将被终止及移afebeead出池。()注意,放入CachedThreadPool的线程不必担心其结束,超过TIMEOUT不活动,其会自动被终止二:newFixedThreadPool()newFixedThreadPool与cacheThreadPool差不多,也是能reuse就用,但不能随时建新的线程()其独特之处:任意时间点,最多只能有固定数目的活动线程存在,此时如果有新的线程要建立,只能放在另外的队列中等待,直到当前的线程中某个线程终止直接被移出池子()和cacheThreadPool不同,FixedThreadPool没有IDLE机制(可能也有,但既然文档没提,肯定非常长,类似依赖上层的TCP或UDPIDLE机制之类的,所以FixedThreadPool多数针对一些很稳定很固定的正规并发线程,多用于服务器()从方法的源代码看,cache池和fixed池调用的是同一个底层池,只不过参数不同:fixed池线程数固定,并且是秒IDLE(无IDLEcache池线程数支持-Integer.MAX_VALUE(显然完全没考虑主机的资源承受能力,秒IDLE三:ScheduledThreadPool(调度型线程池(这个池子里的线程可以按schedule依次delay执行,或周期执行四:SingleThreadExecutor(单例线程,任意时间池中只能有一个线程(用的是和cache池和fixed池相同的底层池,但线程数目是-,秒IDLE(无IDLE

  ⒆线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。假设一个服务器完成一项任务所需时间为:T创建线程时间,T在线程中执行任务的时间,T销毁线程时间。如果:T+T远大于T,则可以采用线程池,以提高服务器性能。线程池组成一个线程池包括以下四个基本组成部分:、线程池管理器(ThreadPool:用于创建并管理线程池,包括创建线程池,销毁线程池,添加新任务;、工作线程(PoolWorker:线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;、任务接口(Task:每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;、任务队列(taskQueue:用于存放没有处理的任务。提供一种缓冲机制。常见线程池①newSingleThreadExecutor单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务②newFixedThreadExecutor(n)固定数量的线程池,没提交一个任务就是一个线程,直到达到线程池的最大数量,然后后面进入等待队列直到前面的任务完成才继续执行③newCacheThreadExecutor(推荐使用可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是秒无执行的线程,当有任务来时,又智能的添加新线程来执行。④newScheduleThreadExecutor大小无限制的线程池,支持定时和周期性的执行线程线程池作用线程池作用就是限制系统中执行线程的数量。使用线程池有如下作用:减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。可以根据系统的承受能力,调整线程池中工作线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约MB内存,线程开的越多,消耗的内存也就越大,最后死机)。原文链接:

  ⒇什么叫线程池线程池如何使用

  ⒈什么是线程池:java.util.concurrent.Executors提供了一个java.util.concurrent.Executor接口的实现用于创建线程池多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。假设一个服务器完成一项任务所需时间为:T创建线程时间,T在线程中执行任务的时间,T销毁线程时间。如果:T+T远大于T,则可以采用线程池,以提高服务器性能。一个线程池包括以下四个基本组成部分:、线程池管理器(ThreadPool:用于创建并管理线程池,包括创建线程池,销毁线程池,添加新任务;、工作线程(PoolWorker:线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;、任务接口(Task:每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;、任务队列(taskQueue:用于存放没有处理的任务。提供一种缓冲机制。线程池技术正是关注如何缩短或调整T,T时间的技术,从而提高服务器程序性能的。它把T,T分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有T,T的开销了。线程池不仅调整T,T产生的时间段,而且它还显著减少了创建线程的数目,看一个例子:假设一个服务器一天要处理个请求,并且每个请求需要一个单独的线程完成。在线程池中,线程数一般是固定的,所以产生线程总数不会超过线程池中线程的数目,而如果服务器不利用线程池来处理这些请求则线程总数为。一般线程池大小是远小于。所以利用线程池的服务器程序不会为了创建而在处理请求时浪费时间,从而提高效率。

  ⒉线程池有几种实现方式,线程池的七大参数有哪些

  ⒊创建大小不固定的线程池

  ⒋[java]?viewplain?copy

  ⒌什么是线程池,如何使用,为什么要用

  ⒍线程池,threadpool,是一种线程使用模式,线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。

  ⒎功能:应用程序可以有多个线程,这些线程在休眠状态中需要耗费大量时间来等待事件发生。其他线程可能进入睡眠状态,并且仅定期被唤醒以轮循更改或更新状态信息,然后再次进入休眠状态。

  ⒏为了简化对这些线程的管理,.框架为每个进程提供了一个线程池,一个线程池有若干个等待操作状态,当一个等待操作完成时,线程池中的辅助线程会执行回调函数。线程池中的线程由系统管理,程序员不需要费力于线程管理,可以集中精力处理应用程序任务。

  ⒐需要大量的线程来完成任务,且完成任务的时间比较短。WEB服务器完成网页请求这样的任务,使用线程池技术是非常合适的。因为单个任务小,而任务数量巨大,你可以想象一个热门网站的点击次数。但对于长时间的任务,比如一个Tel连接请求,线程池的优点就不明显了。因为Tel会话时间比线程的创建时间大多了。

  ⒑对性能要求苛刻的应用,比如要求服务器迅速响应客户请求。

  ⒒接受突发性的大量请求,但不至于使服务器因此产生大量线程的应用。突发性大量客户请求,在没有线程池情况下,将产生大量线程,虽然理论上大部分操作系统线程数目最大值不是问题,短时间内产生大量线程可能使内存到达极限,并出现“OutOfMemory“的错误。

  ⒓参考资料来源:百度百科—线程池

  ⒔下面给你介绍几种常用的线程池:

  ⒕newCachedThreadPool

  ⒖创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

  ⒗这种类型的线程池特点是:

  ⒘newFixedThreadPool

  ⒙创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。

  ⒚FixedThreadPool是一个典型且优秀的线程池,它具有线程池提高程序效率和节省创建线程时所耗的开销的优点。但是,在线程池空闲时,即线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源。

  ⒛newSingleThreadExecutor

  创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,?优先级)执行。如果这个线程异常结束,会有另一个取代它,保证顺序执行。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。

  newScheduleThreadPool

  创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行。

您可能感兴趣的文章:

相关文章