60 lines
2.6 KiB
Java
60 lines
2.6 KiB
Java
|
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()) {
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|