如何深入解析JAVA线程池的原理与实现细节?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4061个文字,预计阅读时间需要17分钟。
系统启动一个新线程的本质是比较高的,因为它涉及与操作系统的交互。在这种情况下,使用线程池可以很好地提升性能,特别是在程序中需要创建大量生命周期短暂线程时,更应考虑使用线程池。
系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情形下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。
与数据库连接池类似的是,线程池在系统启动时即创建大量空闲的线程,程序将一个 Runnable 对象或 Callable 对象传给线程池,线程池就会启动一个线程来执行它们的 run() 或 call() 方法,当 run() 或 call() 方法执行结束后,该线程并不会死亡,而是再次返回线程池成为空闲状态,等待执行下一个 Runnable 对象的 run() 或 call() 方法。
除此之外,使用线程池可以有效地控制系统中并发线程的数量,当系统中包含大量并发线程时,会导致系统性能剧烈下降,甚至导致 JVM 崩溃,而线程池的最大线程数参数可以控制系统中并发线程数不超过此数。
Java 8 改进的线程池
在 Java 5 以前,开发者必须手动实现自己的线程池;从 Java 5 开始, Java 内建支持线程池。 Java 5 新增了一个 Executors 工厂类来产生线程池,该工厂类包含如下几个静态工厂方法来创建线程池。
- newCachedThreadPool():创建一个具有缓存功能的线程池,系统根据需要创建线程,这些线程将会被缓存在线程池中。
- newFixedThreadPool(int nThreads):创建一个可重用的、具有固定线程数的线程池。
本文共计4061个文字,预计阅读时间需要17分钟。
系统启动一个新线程的本质是比较高的,因为它涉及与操作系统的交互。在这种情况下,使用线程池可以很好地提升性能,特别是在程序中需要创建大量生命周期短暂线程时,更应考虑使用线程池。
系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情形下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。
与数据库连接池类似的是,线程池在系统启动时即创建大量空闲的线程,程序将一个 Runnable 对象或 Callable 对象传给线程池,线程池就会启动一个线程来执行它们的 run() 或 call() 方法,当 run() 或 call() 方法执行结束后,该线程并不会死亡,而是再次返回线程池成为空闲状态,等待执行下一个 Runnable 对象的 run() 或 call() 方法。
除此之外,使用线程池可以有效地控制系统中并发线程的数量,当系统中包含大量并发线程时,会导致系统性能剧烈下降,甚至导致 JVM 崩溃,而线程池的最大线程数参数可以控制系统中并发线程数不超过此数。
Java 8 改进的线程池
在 Java 5 以前,开发者必须手动实现自己的线程池;从 Java 5 开始, Java 内建支持线程池。 Java 5 新增了一个 Executors 工厂类来产生线程池,该工厂类包含如下几个静态工厂方法来创建线程池。
- newCachedThreadPool():创建一个具有缓存功能的线程池,系统根据需要创建线程,这些线程将会被缓存在线程池中。
- newFixedThreadPool(int nThreads):创建一个可重用的、具有固定线程数的线程池。

