awaitTermination 方法
1、基本介绍
booleanawaitTermination(longtimeout,TimeUnitunit)throwsInterruptedException;| 参数 | 类型 | 说明 |
|---|---|---|
| timeout | long | 等待时间 |
| unit | TimeUnit | 时间单位 |
| 返回值 | 说明 |
|---|---|
| true | 线程池在超时前已终止 |
| false | 超时后线程池仍未终止 |
awaitTermination 是 Java 线程池中用于等待任务执行完成的方法
awaitTermination 方法会阻塞调用线程,直到所有任务都执行完成、发生超时、调用线程被中断
2、演示
- 线程池执行任务,任务耗时 5 秒,主线程 2 秒后,调用 awaitTermination 方法,等待 10 秒,线程池在超时前已终止
ExecutorServiceexecutorService=Executors.newSingleThreadExecutor();executorService.execute(()->{System.out.println("任务开始执行");try{Thread.sleep(5*1000);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println("任务执行完成");});try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}executorService.shutdown();try{booleanresult=executorService.awaitTermination(10,TimeUnit.SECONDS);if(result){System.out.println("所有任务都已完成");}else{System.out.println("超时,任务未完成");}}catch(InterruptedExceptione){thrownewRuntimeException(e);}# 输出结果 任务开始执行 任务执行完成 所有任务都已完成- 线程池执行任务,任务耗时 10 秒,主线程 2 秒后,调用 awaitTermination 方法,等待 5 秒,线程池在超时后仍未终止
ExecutorServiceexecutorService=Executors.newSingleThreadExecutor();executorService.execute(()->{System.out.println("任务开始执行");try{Thread.sleep(10*1000);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println("任务执行完成");});try{Thread.sleep(2*1000);}catch(InterruptedExceptione){e.printStackTrace();}executorService.shutdown();try{booleanresult=executorService.awaitTermination(5,TimeUnit.SECONDS);if(result){System.out.println("所有任务都已完成");}else{System.out.println("超时,任务未完成");}}catch(InterruptedExceptione){thrownewRuntimeException(e);}# 输出结果 任务开始执行 超时,任务未完成 任务执行完成