Java中四种线程池的使用示例详解
前言
线程池可以实现线程的复用, 表示为一个线程池中的线程可以多次使用, 而不是单个线程只能被使用一次。Java中的线程池主要有四种, 分别是固定线程数线程池、可缓存的线程池、单线程化线程池和定时器线程池。接下来我们将介绍这四种线程池的使用详细攻略。
一、固定线程数线程池
固定线程数线程池,顾名思义,就是只有固定数量的线程可以执行任务。如果所有线程都在忙碌,新任务就会等待直到线程池中的一条线程被释放。下面是使用固定线程数线程池的示例代码:
int corePoolSize = 5; // 线程池核心线程数
int maxPoolSize = 10; // 最大线程池数
long keepAliveTime = 5000; // 超过核心线程数时, 多余线程的空闲时间, 在这个时间内会收到线程池的心跳包, 判断是否存活。
// 创建一个固定线程数的线程池
ExecutorService executorService = Executors.newFixedThreadPool(corePoolSize);
// 向线程池添加任务
for (int i = 0; i < maxPoolSize; i++) {
executorService.submit(new DownloadTask("task_" + i));
}
// 显示线程池当前的线程数目
System.out.println("当前线程池中线程数目:" + executorService.getPoolSize());
// 显示当前活跃线程数目, 活跃线程数目是比核心线程数大的。
System.out.println("当前线程池中活跃线程数目:" + executorService.getActiveCount());
// 释放线程池资源
executorService.shutdown();
二、可缓存的线程池
可缓存的线程池是自动根据需要(任务数量)来增加线程数量的线程池。线程池的数量不限制,如果有新任务进来,就会创建新线程,否则就会利用空闲线程。空闲线程会保留一定的时间(60s)被回收掉。下面是使用可缓存的线程池的示例代码:
int corePoolSize = 0; // 核心线程数, 一般设置为 0
long keepAliveTime = 60L; // 非核心线程被回收的时间, 时间单位为秒
// 创建一个可缓存线程池
ExecutorService executorService = Executors.newCachedThreadPool();
// 向线程池添加任务
for (int i = 0; i < 10; i++) {
executorService.submit(new DownloadTask("task_" + i));
}
// 显示线程池当前的线程数目
System.out.println("当前线程池中线程数目:" + executorService.getPoolSize());
// 显示当前活跃线程数目, 活跃线程数目是比核心线程数大的。
System.out.println("当前线程池中活跃线程数目:" + executorService.getActiveCount());
// 释放线程池资源
executorService.shutdown();
结论
Java中的线程池是一个非常重要的概念。在线程池中,线程的重用可以提供性能和吞吐量。本文介绍了Java中线程池的四种类型,并给出了使用示例。可以根据业务需要选择适合的线程池类型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中四种线程池的使用示例详解 - Python技术站