说说你对线程池的了解 —— 初识线程池

Posted 码农这些事儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了说说你对线程池的了解 —— 初识线程池相关的知识,希望对你有一定的参考价值。

码农这些事儿

关注

说说你对线程池的了解(一) —— 初识线程池

线程池是什么?

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。

线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。

为什么用线程池?

为什么要使用线程池,也就是线程池的出现解决了什么样的问题。对此,我曾经看到Neal Gafter的访谈里有这么一段谈话:

说说你对线程池的了解(一) —— 初识线程池

我们都知道创建/销毁线程总伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率;而线程池会直接创建好一些线程并缓存在线程池里,后面来了请求就从连接池中取出一个线程处理请求,从而很好的提高了效率。那么线程池的存在仅仅是解决了效率的问题么?这段话给出了另外一个思路:当线程并发数量过多时,抢占系统资源会导致阻塞,甚至还可能导致内存溢出;而我们使用java线程池的话,线程数量一定会<=maximumPoolSize(线程池的最大线程数),所以设置合理的话就不会造成内存溢出。

Executor类的继承结构

说说你对线程池的了解(一) —— 初识线程池

Executor是线程池的顶级接口,只有一个执行任务的方法execute()。ExecutorService是Executor的子接口,该接口中包含了线程池常用的一些方法。

ThreadPoolExecutor是ExecutorService的默认实现,同时也是Executor的底层实现。

我们常说的线程池必须先从ThreadPoolExecutor说起。


关于ThreadPoolExecutor,我们下回再说。



____

______

________

____

______

________



以上是关于说说你对线程池的了解 —— 初识线程池的主要内容,如果未能解决你的问题,请参考以下文章

由于不知线程池的bug,某Java程序员叕被祭天

Java 线程池 ThreadPoolExecutor源码简析

Java 线程池 ThreadPoolExecutor源码简析

面试必问:来说说你是怎么使用线程池的?本文教你如何完美回答!

谈谈你对Netty服务端的两个线程池的理解?

线程池的初步了解