`

ExecutorService 的shutdown 与 shutdownNow

 
阅读更多

shutdown 对执行中的任务无影响,会执行等待队列中的所有任务。

shutdownNow 对执行中的任务进行Thread.interrupt(),不会执行等待队列中的任务,这些队列中的任务其实shutdownNow的返回参数。

 

shutdown和shutDownNow的共同之处在于立刻返回,不等待池中的任务。要等待池中的任务完成,要调用awaitTermination。

 

shutdown其实也可以做到与shutDownNow一样的效果。

我们往ExecutorService中submit任务,会得到一个Future。我们把这些future收集起来,放到一个List,那么以下代码

excutorService.shutdown();
for(Future f : futureList){
  f.cacel(true)
}

 与

excutorService.shutDownNow()

 等效。

分享到:
评论

相关推荐

    ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭

    这与`shutdownNow()`方法形成对比,后者试图立即停止正在执行的任务。了解这些细节对于编写高效、健壮的并发代码至关重要。同时,`Future`接口提供了对任务状态的控制,是并发编程中的重要工具。最后,学习和掌握...

    ExecutorService线程池

    3. **关闭线程池**:任务执行完毕后,应调用`shutdown()`或`shutdownNow()`方法来停止接收新任务,并等待正在执行的任务完成。`shutdown()`会等待已提交任务执行完毕,而`shutdownNow()`尝试停止所有正在执行的任务...

    Java使用ExecutorService来停止线程服务

    首先,我们需要了解 ExecutorService 的两个关闭方法:shutdown() 和 shutdownNow()。这两个方法的区别在于它们的安全性和响应性。shutdown() 方法会正常关闭线程池,等待所有任务执行完毕后关闭,而 shutdownNow() ...

    Executor,Executors,ExecutorService比较.docx

    - **shutdownNow()**:尝试停止所有正在执行的任务,不再接受新任务,但可能无法立即停止所有任务。 使用`ExecutorService`示例: ```java ExecutorService executorService = Executors.newFixedThreadPool(5); ...

    2_ExecutorService源码阅读1

    与 shutdown() 不同,shutdownNow() 尝试停止正在执行的任务,并返回一个包含未开始执行任务的列表。尽管它会尽力中断正在运行的任务,但不能保证所有任务都能立即停止,特别是对于那些不响应中断信号的任务。 **...

    java ExecutorService使用方法详解

    而`shutdownNow()`方法会尝试停止所有正在执行的任务,并拒绝新提交的任务。 5. **移除线程** 问题提到如何从线程池中移除或使某个线程成为空闲线程。实际上,`ExecutorService`并不直接提供移除线程的方法。...

    详解Java利用ExecutorService实现同步执行大量线程

    Java中的ExecutorService是Java并发编程的重要组成部分,它提供了一种高效、灵活的方式来管理和控制线程的...同时,合理地关闭ExecutorService(通过`shutdown()`或`shutdownNow()`方法)也是防止资源泄漏的关键步骤。

    Java 线程池ExecutorService详解及实例代码

    ExecutorService则提供了更丰富的操作,如shutdown()用于停止接收新任务并等待已提交任务完成,shutdownNow()尝试停止所有正在执行的任务,以及submit()方法用于提交Callable任务并返回Future结果。 3. Executors...

    java线程池常用方法.docx

    List<Runnable> notRunTasks = executorService.shutdownNow(); ``` #### 五、综合实例解析 下面是一个简单的示例代码,展示了如何使用固定大小的线程池来执行任务: ```java public class ...

    multithread:使用 Java8 ExecutorService 的简单多线程示例

    当所有任务执行完毕,或者 `shutdownNow()` 被调用并所有可取消的任务都被取消时,ExecutorService 进入“已终止”状态。 在 `multithread-master` 压缩包中,可能包含了演示如何使用 `ExecutorService` 创建多线程...

    关闭线程池

    这通常通过调用`ExecutorService`的`shutdown()`或`shutdownNow()`方法实现。 在给出的部分代码中,作者创建了一个名为`Listener`的类,它实现`Runnable`接口,用于监听特定端口并处理客户端请求。线程池`...

    Java ExcutorService优雅关闭方式解析

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

    shutdown-app

    - 对于多线程应用,`ExecutorService`提供`shutdown()`和`shutdownNow()`方法来停止工作线程。`shutdown()`等待所有已提交的任务执行完毕,而`shutdownNow()`尝试停止所有正在执行的任务。 7. **Docker容器中的...

    理解java多线程中ExecutorService使用

    - `shutdownNow()`:尝试停止所有正在执行的任务,并不再接受新任务。 2. **Executor接口**: 这是`ExecutorService`的基础,仅包含一个方法`execute(Runnable)`,用于启动一个任务。它是多线程编程的基本接口,...

    Java并发编程利器:Executor框架深度解析与应用实践

    资源清理:确保在不需要时调用shutdown()或shutdownNow()来关闭ExecutorService。 异常处理:任务可能会抛出异常,需要妥善处理这些异常,避免程序崩溃。 避免内存泄漏:确保提交到ExecutorService的任务在完成后...

    刘林玉2013095023第三次.docx

    6. **线程池的关闭与关闭策略**:通过`shutdown()`或`shutdownNow()`方法可以关闭线程池。`shutdown()`会等待所有已提交的任务完成后再关闭,而`shutdownNow()`尝试停止正在执行的任务并立即关闭。 理解`...

    Java线程超时监控

    executor.shutdownNow(); // 关闭线程池 } ``` 在上述代码中,`future.get(5, TimeUnit.SECONDS)`会阻塞当前线程,直到任务完成或超过指定的超时时限。如果任务在规定时间内完成,`get`方法会返回结果;否则,它将...

    Android线程池ExcutorService

    使用`ExecutorService`的`shutdown()`或`shutdownNow()`方法来关闭线程池。`shutdown()`方法会等待所有已提交的任务执行完毕后再停止服务,而`shutdownNow()`会尝试停止正在执行的任务,并阻止新任务的提交。 6. *...

    JAVA多线程框架.pdf

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

    Java中多线程的使用线程池.docx

    - **关闭线程池**:在所有任务执行完毕后,调用 `executorService.shutdown()` 或 `executorService.shutdownNow()` 来优雅地关闭线程池。 6. **示例代码**: - `MyThread` 类实现了`Runnable`接口,`run`方法...

Global site tag (gtag.js) - Google Analytics