阅读量:126
newCachedThreadPool 是 Java 中 Executors 类提供的一个线程池创建方法。它会根据需要创建新的线程,但是当线程数量达到处理需要时,它会重用已创建的线程。如果线程闲置的时间超过 60 秒,则被终止并移出缓存。这种线程池可以有效地控制线程数量,避免大量线程之间的竞争和上下文切换,适用于执行大量短时任务。
以下是 newCachedThreadPool 的参数说明:
- corePoolSize(核心线程数):缓存线程池的基本大小,即线程池中始终保持活跃的线程数量。默认值为 1。这个参数可以根据实际需要设置。
- maximumPoolSize(最大线程数):缓存线程池允许的最大线程数量。当任务数量超过了核心线程数时,线程池会创建新的线程直到达到这个最大值。默认值为 Integer.MAX_VALUE。这个参数可以根据实际需要设置,但需要注意不要设置过大,以免消耗过多系统资源。
- keepAliveTime(线程空闲时间):非核心线程在完成任务后,可以继续等待被分配新任务的最长时间。超过这个时间,非核心线程将被终止并移出缓存。默认值为 60 秒。这个参数可以根据实际需要设置。
- unit(时间单位):
keepAliveTime参数的单位。默认值为TimeUnit.SECONDS。这个参数可以根据实际需要设置。 - workQueue(工作队列):用于保存待处理任务的队列。默认情况下,使用无界的工作队列
SynchronousQueue,这意味着如果任务数量超过了当前可用线程数,新提交的任务将会被拒绝。可以根据实际需要选择合适的有界队列或者无界队列。
示例代码:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
public class CachedThreadPoolExample {
public static void main(String[] args) {
ScheduledExecutorService executorService = Executors.newCachedThreadPool();
// 提交任务到线程池
for (int i = 0; i < 10; i++) {
executorService.submit(() -> {
System.out.println("Task executed by thread: " + Thread.currentThread().getName());
});
}
// 关闭线程池
executorService.shutdown();
}
}
在这个示例中,我们创建了一个 ScheduledExecutorService 实例,并使用 newCachedThreadPool 方法创建了一个线程池。然后,我们提交了 10 个任务到线程池,并打印了每个任务执行的线程名称。最后,我们调用 shutdown 方法关闭线程池。