- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在运行一个高度并发的 Java 程序。当许多线程向执行程序服务提交任务时,主线程会在某个时刻调用 ExecutorService.shutdownNow()
。
执行此操作后,我希望:
Thread.currentThread().isInterrupted()
由于我处于以下情况:
ExecutorService.shutdownNow()
而“关闭”,但并未关闭,即 ExecutorService.awaitTermination(long, TimeUnit)
从不返回 true
BlockingQueue.take()
ExecutorService.shutdownNow()
,挂起的线程会因 BlockingQueue.take()
上的 InterruptedException
而死我想中断是在调用 BlockingQueue.take()
之前被那些线程接收到的,InterruptedException 被忽略了。
我还想知道 ExecutorService.shutdownNow()
是否是线程安全的,也就是说,即使线程池正在接收许多提交,它也能正常工作。
总而言之,我有两个问题:
ExecutorService.shutdownNow()
不是线程安全的?最佳答案
Is there any alternative scenario that would explain my situation?
您的线程代码中一定有某些东西正在重置中断标志或吞下另一个方法调用抛出的 InterruptedException
。
如果在执行到达 BlockingQueue.take()
方法之前设置中断标志,该方法仍将抛出 InterruptedException
并中止。以下代码对此进行了演示,该代码立即退出并打印“中断!”:
final BlockingQueue<String> queue = new ArrayBlockingQueue<String>(1);
Thread t = new Thread() {
@Override
public void run() {
Thread.currentThread().interrupt();
try {
queue.take();
} catch (InterruptedException e) {
System.out.println("Interrupted!");
}
};
};
t.start();
Is it possible that ExecutorService.shutdownNow() is not thread safe?
参见,例如:Is ThreadPoolExecutor thread safe? .根据该答案,ExecutorService
的所有标准实现都是线程安全的(即使 Javadoc 并未明确说明该主题)。
关于java - ExecutorService.shutdownNow() 不关闭线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24327711/
我正在开发一款扑翼应用程序。在出现此错误之前,读取和写入FireStore数据库没有任何问题,但随后突然出现错误(如下所示),并阻止我读取或写入数据库。我一直在寻找答案,但不幸的是,我找不到任何可以解
我正在使用ExecutorService连接任务如下: ExecutorService executor = Executors.newSingleThreadExecutor(); Future f
根据方法 shutdownNow (ExecutorService) 的文档 There are no guarantees beyond best-effort attempts to stop
我正在使用 Executors 作为线程池,并提交任务。 executorService.shutdownNow 是否可以关闭所有任务,即使其中一些任务可能在对数据库或 Socket 的 I/O 调用
我有一个预定的执行程序服务设置,例如 class Test { private final ScheduledExecutorService executor; public Test
我创建了一个 future 任务并将其提交给 Executor。在 run() 方法中,我创建了一个 placementPlanner 对象。此类中的方法调用其他类。但是,当我调用 executor.
我正在运行一个高度并发的 Java 程序。当许多线程向执行程序服务提交任务时,主线程会在某个时刻调用 ExecutorService.shutdownNow()。 执行此操作后,我希望: 执行者服务不
此代码在 future.get() 上永久阻塞。我本以为会出现 CancellationException 或 InterruptedException。谁能解释一下? ExecutorService
正在学习 Java 1.5 中引入的 ExecutorService 以下示例似乎违反了预期行为: public static void main(String[] args) throws Inte
我有一个使用 Executors 创建多个线程的主线程 ExecutorService executor = Executors.newFixedThreadPool(4); 每个线程都有可能运行数小
ExecutorService 有一个方法 List shutdownNow() 哪个 returns a list of the tasks that were awaiting execution
ScheduledExecutorService从 ExecutorService 继承了两个方法, shutdown()和 shutdownNow() .它们的区别: shutdown initia
我有一个表单的处理循环 while (true) { doWork(); Thread.sleep(SLEEP_INTERVAL); } 我想用它制作一个 Runnable,它可以很好
package util.concurrent; import java.util.concurrent.ExecutorService; import java.util.concurrent.Ex
写在开头 面试官:“小伙子,线程池使用过吗,来聊一聊它吧!” 我:“好的,然后巴拉巴拉一顿输出之前看过的build哥线程池十八问...” 面试官满意的点了点头,紧接着问道:“那你知道如何优雅
当其中一个已在运行的任务抛出异常时,我需要取消所有已安排但尚未运行的 CompletableFuture 任务。 尝试了以下示例,但大多数时候 main 方法不会退出(可能是由于某种类型的死锁)。 p
我正在实现一个传输服务器程序,该程序从客户端获取消息(通过控制台输入),然后将其转发到某种邮箱。 为了允许不同客户端同时接收多个消息,我首先创建了一个实现Runnable 接口(interface)的
在第一个进程从 invokeAny 方法提供一些输出后,我立即使用 shutdownNow 关闭进程。但在输出中,即使在调用 shutdownNow() 之后,我也可以看到进程仍在完成流程中并完成其工
执行调用的 ExecutorService.shutdownNow() 后,该类卡在 Future.get() 方法处。我不知道我犯了什么错误。 该类创建固定线程池,并在 5 秒后超时。如果连续发生
我目前有一个 ExecutorService,我想要以下内容: 不应接受任何新任务。 当前任务仍应继续执行。 应返回所有当前排队的任务。 我面临的问题是 shutdown() 不会返回任何未执行的已提
我是一名优秀的程序员,十分优秀!