1.shutdown方法:这个方法会平滑地关闭ExecutorService,当我们调用这个方法时,ExecutorService停止接受任何新的任务且等待已经提交的任务执行完成(已经提交的任务会分两类:一类是已经在执行的,另一类是还没有开始执行的),当所有已经提交的任务执行完毕后将会关闭ExecutorService。
2.awaitTermination方法:这个方法有两个参数,一个是timeout即超时时间,另一个是unit即时间单位。这个方法会使线程等待timeout时长,当超过timeout时间后,会监测ExecutorService是否已经关闭,若关闭则返回true,否则返回false。一般情况下会和shutdown方法组合使用。(awaitTermination不会关闭ExecutorService,只是定时检测一下他是否关闭)
public static void main(String[] args) throws IOException, InterruptedException {
ExecutorService service = Executors.newFixedThreadPool(3);
for (int i = 0; i < 4; i++) {
Runnable run = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("thread start");
}
};
service.execute(run);
}
service.shutdown();
while(!service.awaitTermination(2, TimeUnit.SECONDS)){
System.out.println("service not stop");
}
System.out.println("all thread complete");
}
运行结果:
service not stop
thread start
thread start
thread start
service not stop
service not stop
thread start
all thread complete
分享到:
相关推荐
- **Condition termination**:支持awaitTermination方法的等待条件。 - **Worker类**:线程池的核心组件,实现了Runnable接口,用于执行任务。每个Worker包含一个内部的任务队列,用于存储尚未开始执行的任务。 ...
executor.awaitTermination(60, TimeUnit.SECONDS)) { executor.shutdownNow(); } } catch (InterruptedException e) { executor.shutdownNow(); Thread.currentThread().interrupt(); } ``` 5. **结果处理**:...
随后,我们调用 shutdown() 方法来关闭线程池,并使用 awaitTermination() 方法来等待所有任务执行完毕。 使用 shutdownNow() 方法来停止线程服务 ----------------------------- shutdownNow() 方法会强行关闭...
**awaitTermination() 方法** 这个方法阻塞当前线程,直到所有在调用 shutdown() 时正在执行的任务完成,或者超过指定的超时时间,或者线程被中断。它允许开发者等待一段时间,确保所有任务完成或者达到预设的超时...
在上述代码中,我们看到一个典型的应用场景:如果`awaitTermination`在超时后返回false,这意味着不是所有的任务都在规定时间内完成,这时我们调用`executorService.shutdownNow()`。这个方法尝试停止所有正在执行的...
1. **使用Tomcat的GracefulShutdown**: 如果你的Spring Boot应用使用内嵌的Tomcat服务器,可以通过设置`server.tomcat.graceful-shutdown`属性来控制等待时间。例如,在`application.properties`中添加`server....
在上面的代码中,我们使用`shutdown()`方法终止线程池,然后使用`awaitTermination()`方法等待所有任务执行完成。如果在等待超时后,仍然有任务未完成,则使用`shutdownNow()`方法强制终止线程池。 四、shutdown()...
需要注意的是,`shutdown()`并不会阻塞调用它的主线程,因此如果需要等待所有任务执行完毕,可以使用`ExecutorService.shutdownNow()`或`ExecutorService.awaitTermination()`。 定时任务是另一个关键特性,Java....
- 接着调用`executor.awaitTermination(60, TimeUnit.SECONDS)`等待所有任务完成,以确保所有转账操作都已完成才结束程序。 #### 四、总结 本文介绍了如何使用Java并发编程技术实现一个简单的银行账户管理系统。...
executor.awaitTermination(60, TimeUnit.SECONDS)) { executor.shutdownNow(); // 如果超时未完成,强制停止所有任务 } } catch (InterruptedException e) { executor.shutdownNow(); // 中断时也强制停止所有...
5. 使用 `isTerminated()` 或 `awaitTermination()` 检查线程池是否已完成所有任务并关闭。 线程池的配置需要根据应用程序的特性和需求来设定,合理的配置可以提高系统的并发性能和响应速度。例如,对于CPU密集型...
3. 使用`shutdown()`和`awaitTermination()`优雅地关闭线程池:在应用退出时,确保正确关闭线程池,避免内存泄漏和资源占用。 总结,`Android Executor`线程池提供了强大的并发任务处理能力,通过合理配置和使用,...
ExecutorService接口扩展了Executor,提供了管理和控制线程池的方法,如submit()、shutdown()和awaitTermination()等。 2. **Future和Callable**:Future接口代表异步计算的结果,Callable接口用于创建能产生结果的...
最后,使用`ExecutorService`的`shutdown()`方法停止接收新任务,`awaitTermination()`方法等待所有任务完成: ```java executor.shutdown(); while (!executor.awaitTermination(1, TimeUnit.SECONDS)) { // ...
为了在Spring Boot应用关闭时自动执行`shutdown`操作,我们可以使用`ApplicationListener`监听`ContextClosedEvent`事件。当Spring容器关闭时,这个事件会被触发。以下是一个示例: ```java @Configuration public ...
使用 `ExecutorService` 可以轻松地管理和控制并发任务的执行,比如通过 `execute()` 方法提交任务,或者通过 `shutdown()` 和 `awaitTermination()` 方法来关闭服务并等待所有任务完成。通过合理配置线程池,可以...
channel.shutdownNow().awaitTermination(5, TimeUnit.SECONDS); } } ``` 7. **运行与测试**: 编译并运行服务器和客户端,验证 GRPC 通信是否正常。客户端会发送请求到服务器,服务器接收到请求后返回响应,...
代码示例中,可能会包含创建`ExecutorService`、创建任务(可能是`Runnable`或`Callable`)、提交任务到线程池、等待所有任务完成(使用`shutdown()`和`awaitTermination()`)的流程。此外,可能还会涉及线程安全的...
ExecutorService是Executor的一个扩展,提供了一套更丰富的生命周期管理方法,如`submit()`、`shutdown()`和`awaitTermination()`等,方便管理和控制线程池。 2. **线程池**:`java.util.concurrent....