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
方法关闭线程池。