`
ncs123
  • 浏览: 103364 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

shutdown,awaitTermination使用

    博客分类:
  • J2SE
阅读更多
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
分享到:
评论

相关推荐

    ThreadPoolExecutor源码解析.pdf

    - **Condition termination**:支持awaitTermination方法的等待条件。 - **Worker类**:线程池的核心组件,实现了Runnable接口,用于执行任务。每个Worker包含一个内部的任务队列,用于存储尚未开始执行的任务。 ...

    JAVA使用线程池查询大批量数据

    executor.awaitTermination(60, TimeUnit.SECONDS)) { executor.shutdownNow(); } } catch (InterruptedException e) { executor.shutdownNow(); Thread.currentThread().interrupt(); } ``` 5. **结果处理**:...

    Java使用ExecutorService来停止线程服务

    随后,我们调用 shutdown() 方法来关闭线程池,并使用 awaitTermination() 方法来等待所有任务执行完毕。 使用 shutdownNow() 方法来停止线程服务 ----------------------------- shutdownNow() 方法会强行关闭...

    2_ExecutorService源码阅读1

    **awaitTermination() 方法** 这个方法阻塞当前线程,直到所有在调用 shutdown() 时正在执行的任务完成,或者超过指定的超时时间,或者线程被中断。它允许开发者等待一段时间,确保所有任务完成或者达到预设的超时...

    Java ExcutorService优雅关闭方式解析

    在上述代码中,我们看到一个典型的应用场景:如果`awaitTermination`在超时后返回false,这意味着不是所有的任务都在规定时间内完成,这时我们调用`executorService.shutdownNow()`。这个方法尝试停止所有正在执行的...

    springboot优雅停机实战demo

    1. **使用Tomcat的GracefulShutdown**: 如果你的Spring Boot应用使用内嵌的Tomcat服务器,可以通过设置`server.tomcat.graceful-shutdown`属性来控制等待时间。例如,在`application.properties`中添加`server....

    Java线程池用法实战案例分析

    在上面的代码中,我们使用`shutdown()`方法终止线程池,然后使用`awaitTermination()`方法等待所有任务执行完成。如果在等待超时后,仍然有任务未完成,则使用`shutdownNow()`方法强制终止线程池。 四、shutdown()...

    JAVA多线程框架.pdf

    需要注意的是,`shutdown()`并不会阻塞调用它的主线程,因此如果需要等待所有任务执行完毕,可以使用`ExecutorService.shutdownNow()`或`ExecutorService.awaitTermination()`。 定时任务是另一个关键特性,Java....

    使用Java并发编程实现一个简单的银行账户管理系统.txt

    - 接着调用`executor.awaitTermination(60, TimeUnit.SECONDS)`等待所有任务完成,以确保所有转账操作都已完成才结束程序。 #### 四、总结 本文介绍了如何使用Java并发编程技术实现一个简单的银行账户管理系统。...

    Android 下soap线程池并发请求

    executor.awaitTermination(60, TimeUnit.SECONDS)) { executor.shutdownNow(); // 如果超时未完成,强制停止所有任务 } } catch (InterruptedException e) { executor.shutdownNow(); // 中断时也强制停止所有...

    创建Java程序中线程池的详解

    5. 使用 `isTerminated()` 或 `awaitTermination()` 检查线程池是否已完成所有任务并关闭。 线程池的配置需要根据应用程序的特性和需求来设定,合理的配置可以提高系统的并发性能和响应速度。例如,对于CPU密集型...

    Android Executor线程池

    3. 使用`shutdown()`和`awaitTermination()`优雅地关闭线程池:在应用退出时,确保正确关闭线程池,避免内存泄漏和资源占用。 总结,`Android Executor`线程池提供了强大的并发任务处理能力,通过合理配置和使用,...

    Java并发工具包对并发编程的优化.zip

    ExecutorService接口扩展了Executor,提供了管理和控制线程池的方法,如submit()、shutdown()和awaitTermination()等。 2. **Future和Callable**:Future接口代表异步计算的结果,Callable接口用于创建能产生结果的...

    java下载网络图片

    最后,使用`ExecutorService`的`shutdown()`方法停止接收新任务,`awaitTermination()`方法等待所有任务完成: ```java executor.shutdown(); while (!executor.awaitTermination(1, TimeUnit.SECONDS)) { // ...

    Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线程池的优雅关闭详解

    为了在Spring Boot应用关闭时自动执行`shutdown`操作,我们可以使用`ApplicationListener`监听`ContextClosedEvent`事件。当Spring容器关闭时,这个事件会被触发。以下是一个示例: ```java @Configuration public ...

    你所不知道的五件事情(并发多线程编程).doc

    使用 `ExecutorService` 可以轻松地管理和控制并发任务的执行,比如通过 `execute()` 方法提交任务,或者通过 `shutdown()` 和 `awaitTermination()` 方法来关闭服务并等待所有任务完成。通过合理配置线程池,可以...

    grpc java版本demo

    channel.shutdownNow().awaitTermination(5, TimeUnit.SECONDS); } } ``` 7. **运行与测试**: 编译并运行服务器和客户端,验证 GRPC 通信是否正常。客户端会发送请求到服务器,服务器接收到请求后返回响应,...

    基于任务线程处理例子

    代码示例中,可能会包含创建`ExecutorService`、创建任务(可能是`Runnable`或`Callable`)、提交任务到线程池、等待所有任务完成(使用`shutdown()`和`awaitTermination()`)的流程。此外,可能还会涉及线程安全的...

    java并发工具包

    ExecutorService是Executor的一个扩展,提供了一套更丰富的生命周期管理方法,如`submit()`、`shutdown()`和`awaitTermination()`等,方便管理和控制线程池。 2. **线程池**:`java.util.concurrent....

Global site tag (gtag.js) - Google Analytics