一、池化思想和JAVA线程池
池化是很重要的思想;池化的好处是提供缓冲和统一的管理。这个笔者在本人的数据库连接池的博客中已经提到过了(JAVA常用数据库连接池_王者之路001的博客-CSDN博客
)。
线程池是另一种池化思想的运用,把线程放入池中进行管理。这种方法的好处是可以避免线程的创建、切换和销毁,因为这些过程非常耗资源。
JAVA线程池就是这样的一种线程池。
二、JAVA线程池基本原理
JAVA线程池的基本原理,其实就是对线程的生产者-消费者模型。线程池对产生的任务进行序贯执行。
JAVA线程池主要做的事情是对线程池的管理和任务的执行。
如上图所示,右半部分是线程池的管理,而左半部分是任务的执行。
任务执行通过阻塞队列来完成。
线程池执行任务如下图所示:
JAVA线程池会确定核心线程数和最大线程数,来控制线程池的大小。
三、JAVA线程池的使用
JAVA线程池主要有newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor和newScheduledThreadPool。
一般通过父类ExecutorService声明使用。代码样例如下:
public class FixedThreadPool {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
for (int i = 0; i < 200; i++) {
executorService.execute(new Task());
}
executorService.shutdown();
}
}
其中,Task为相关线程。也可以采用匿名函数等方式运行。
四、避免的问题
一般情况下,大厂都不建议工程师自己创建线程池,因为线程池创建很容易消耗大量内存。大厂一般有自己的线程池创建模型。
参考文献
[1]Java线程池实现原理及其在美团业务中的实践 - 美团技术团队
[2]面试必问:Java 线程池 | Java程序员进阶之路
[3]JUC线程池: ThreadPoolExecutor详解 | Java 全栈知识体系
[4]https://www.cnblogs.com/vipstone/p/14149065.html
[5]彻底搞懂Java线程池的工作原理-51CTO.COM
[6]https://www.cnblogs.com/pcheng/p/13540619.html