newCachedThreadPool
是 Java 中 Executors
类提供的一种线程池创建方法。这个线程池具有以下特点:
缓存线程:当有新任务提交时,如果线程池中有空闲线程,那么就会复用这个线程来执行新任务。如果没有空闲线程,线程池会创建一个新线程来执行任务。当任务执行完成后,线程不会被销毁,而是回到线程池中,等待下一个任务。
动态调整线程数量:线程池会根据任务的负载情况动态调整线程数量。当任务较多时,线程池会创建更多的线程来提高处理能力;当任务较少时,线程池会减少线程数量以节省资源。
允许最大线程数:newCachedThreadPool
允许设置线程池中的最大线程数。当线程数量超过最大线程数时,新提交的任务会被拒绝。这可以防止线程池因为创建过多线程而导致资源耗尽。
无界任务队列:newCachedThreadPool
使用一个无界任务队列(LinkedBlockingQueue
)来存储待执行的任务。这意味着,只要系统资源允许,线程池可以不断创建新线程来处理任务。但是,当系统资源紧张时,无界任务队列可能会导致内存溢出。
适用于临时任务:newCachedThreadPool
适用于执行一些临时性的、短时间运行的任务,例如 Web 请求处理、数据处理等。对于长时间运行的任务或者需要保证线程安全性的任务,不建议使用 newCachedThreadPool
。
下面是一个使用 newCachedThreadPool
的示例:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CachedThreadPoolExample {
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
executorService.submit(() -> {
System.out.println("Task executed by thread: " + Thread.currentThread().getName());
});
}
executorService.shutdown();
}
}
在这个示例中,我们创建了一个 newCachedThreadPool
,并提交了 10 个任务。线程池会根据任务的负载情况动态调整线程数量,并在任务执行完成后复用线程。