什么是线程池?
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。
每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。
如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。
超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。线程池中的线程由系统管理,程序员不需要费力于线程管理,可以集中精力处理应用程序任务。
jdk中的线程池介绍
executors 是个线程的工厂类,可以用来创建线程池。
常用的线程池有三种
newSingleThreadExecutor:创建一个单线程的线程池
newFixThreadPool:创建一个固定大小的线程池
newCachedThreadPool:创建一个可缓存的线程池
线程池的好处
降低资源消耗,重复利用,降低线程的创建和销毁的造成的消耗
提高响应速度,当任务到达时不需要等待。
提高线程管理性,如果无限制的进行创建,造成系统资源消耗,还会降低系统的稳当性
防止服务器过载,形成内存溢出,耗尽cpu
线程池的工作机制及其原理
线程池的核心俩个队列:
线程等待池,即线程队列BlockingQueue
任务处理池,即正在工作的的thread列表(Hashset<Worker>)
线程池运行机制
举个列子:假如有一个工厂,工厂里面有10个工人,每个工人同时只能做一件任务
。因此只要当10个工人是空闲的,来了任务就能分配给工人(线程)做;当10个工人都
有任务做时,如果还来任务,那么任务就排队等待,如果任务增长数目大于工人工作的
速度,没有工人的人数还可以增加,那么招再招4个工人,,然后将临时任务交给这个4个工人
去做,如果工作速度还是不够,那么就不接收任务了,当14个工人有人空闲时,那么只保持原来的
10个工人。
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。
每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。
如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。
超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。线程池中的线程由系统管理,程序员不需要费力于线程管理,可以集中精力处理应用程序任务。
jdk中的线程池介绍
executors 是个线程的工厂类,可以用来创建线程池。
常用的线程池有三种
newSingleThreadExecutor:创建一个单线程的线程池
newFixThreadPool:创建一个固定大小的线程池
newCachedThreadPool:创建一个可缓存的线程池
线程池的好处
降低资源消耗,重复利用,降低线程的创建和销毁的造成的消耗
提高响应速度,当任务到达时不需要等待。
提高线程管理性,如果无限制的进行创建,造成系统资源消耗,还会降低系统的稳当性
防止服务器过载,形成内存溢出,耗尽cpu
线程池的工作机制及其原理
线程池的核心俩个队列:
线程等待池,即线程队列BlockingQueue
任务处理池,即正在工作的的thread列表(Hashset<Worker>)
线程池运行机制
举个列子:假如有一个工厂,工厂里面有10个工人,每个工人同时只能做一件任务
。因此只要当10个工人是空闲的,来了任务就能分配给工人(线程)做;当10个工人都
有任务做时,如果还来任务,那么任务就排队等待,如果任务增长数目大于工人工作的
速度,没有工人的人数还可以增加,那么招再招4个工人,,然后将临时任务交给这个4个工人
去做,如果工作速度还是不够,那么就不接收任务了,当14个工人有人空闲时,那么只保持原来的
10个工人。