package bunny.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadTest6 { public static void main(String[] args) { // 创建一个可缓存的线程池,该线程池的线程数量可以根据任务的需求进行自动调整。 // 当有新的任务提交时,如果有空闲线程,则立即执行;如果没有空闲线程,则创建新的线程。 // 当线程空闲一段时间后,如果线程池中的线程数量超过了核心线程数(默认为0),则这些空闲线程将被终止。 try (ExecutorService pool = Executors.newCachedThreadPool()) { // pool.submit(); // pool.execute(); // pool.awaitTermination(); // pool.invokeAll(); // pool.isShutdown(); // pool.isTerminated(); pool.shutdownNow(); // 优雅地关闭线程池。该方法会等待线程池中的所有任务执行完成后再关闭。 pool.shutdown(); } // 创建一个固定大小的线程池,该线程池中的线程数量始终保持不变。 // 当有新的任务提交时,如果线程池中有空闲线程,则立即执行; // 如果没有空闲线程,则任务将等待,直到有线程可用为止。 try (ExecutorService pool = Executors.newFixedThreadPool(4)) { } // 创建一个单线程的线程池,该线程池中只有一个工作线程。 // 所有提交的任务按照顺序执行,即使任务抛出异常也不会影响后续任务的执行。 try (ExecutorService pool = Executors.newSingleThreadExecutor()) { } // 创建一个固定大小的线程池,该线程池可以执行定时任务和周期性任务。 // 除了执行普通任务外,还可以使用 schedule() 和 scheduleAtFixedRate() 方法调度任务的执行。 try (ExecutorService pool = Executors.newScheduledThreadPool(4)) { } // 创建一个单线程的线程池,该线程池可以执行定时任务和周期性任务。 // 与 newScheduledThreadPool() 类似,但只有一个工作线程。 try (ExecutorService pool = Executors.newSingleThreadScheduledExecutor()) { } // 创建一个工作窃取线程池,该线程池基于 Fork/Join 框架。 // 它根据可用处理器的数量创建并行线程来执行任务,并且可以自动处理任务的分割和合并。 try (ExecutorService pool = Executors.newWorkStealingPool()) { } } }