gpt4 book ai didi

java - Executor shutdownNow 任务被阻止?

转载 作者:行者123 更新时间:2023-12-02 21:45:48 32 4
gpt4 key购买 nike

我正在使用 Executors 作为线程池,并提交任务。 executorService.shutdownNow 是否可以关闭所有任务,即使其中一些任务可能在对数据库或 Socket 的 I/O 调用上被阻止?

最佳答案

就看你的任务写得好不好!

documentation说:“shutdown() 方法将允许先前提交的任务在终止之前执行,而 shutdownNow() 方法则阻止等待任务启动并尝试停止当前正在执行的任务。”

但是,Java 不会“凭空”终止线程。它试图打断他们。当 shtudownNow 尝试中断任务时,一个好的任务会抛出某种 InterruptException 并优雅地结束。您提到套接字通信 - 大多数体面的客户端阻塞方法如果被中断,都会抛出中断异常。

坏任务的一个例子可能是(相当明显)使用 while(true) { readChunk(); 运行线程。 if(endOfChunks) {break;} }。这不提供优雅的中断检查!旧规则是不要使用 while 循环来等待,而是在可以中断的“阻塞”对象上使用 syncronizedwait()

关于java - Executor shutdownNow 任务被阻止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16283619/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com