- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在这个荒谬的问题上苦苦挣扎了几个小时,所以现在我正在寻求帮助。
1 liner:我的关闭钩子(Hook)显然在完成其职责之前就终止了。
我正在运行的代码如下所示:
class Test {
static {
Runtime.getRuntime().addShutdownHook(new Thread(Test::shutdown));
}
// more methods
private static void shutdown() {
Collection<Foo> coll = some.instance.ofHashMap.values();
System.out.println("collSize=" + coll.size());
for (Foo o : coll) {
System.out.println("Calling bar on foo");
o.bar();
}
System.out.println("End of hook");
}
}
但是输出是:
collSize=1
如果我使用 -server 选项运行 jvm,我可能会很幸运,并且会打印“Calling bar on foo”,但它仍然不会打印“End of hook”。
不幸的是,我无法创建一个简短的可执行示例来显示该问题。我有一个,但它显示一切正常,并且集合按预期迭代。上面的代码是我正在处理的一个更大的程序的摘录,但是我的关闭是钩子(Hook)除了上面的操作之外什么也没做(获取一个非空集合并迭代)。
对可能发生的事情有什么想法吗?我完全迷失在这里......
注释: - 代码是针对 Java 8u45 编写、编译和运行的 - 我用Ctrl+C杀死程序,结果,JVM存在,代码为130
最佳答案
来自the docs (强调我的)你只被 promise “尽最大努力”关闭 Hook :
Shutdown hooks run at a delicate time in the life cycle of a virtual machine and should therefore be coded defensively. They should, in particular, be written to be thread-safe and to avoid deadlocks insofar as possible. They should also not rely blindly upon services that may have registered their own shutdown hooks and therefore may themselves in the process of shutting down. Attempts to use other thread-based services such as the AWT event-dispatch thread, for example, may lead to deadlocks.
Shutdown hooks should also finish their work quickly. When a program invokes exit the expectation is that the virtual machine will promptly shut down and exit. When the virtual machine is terminated due to user logoff or system shutdown the underlying operating system may only allow a fixed amount of time in which to shut down and exit. It is therefore inadvisable to attempt any user interaction or to perform a long-running computation in a shutdown hook.
所以,基本上,如果还有其他地方可以做,就在那里做。如果您必须在关闭 Hook 中执行此操作,请 Action 要快。
关于java - 集合未在 java shutdown hook 中迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911602/
假设我的 Linux 系统中运行着 20 个进程/deqamons,与 SHUTDOWN 相比,HALT 对我的进程/守护进程的影响有何不同 最佳答案 通常,人们使用 shutdown command
我无法理解差异。帮我看看这个区别。而ProcessPoolExecutor呢,他的行为是一样的吗? def func(task): do_something(task) tasks = [ta
在某个时候,在代码推送后不久,我们看到我们的 Web 应用程序多次重启,但没有任何日志记录表明存在任何问题。所以我找到了这篇文章:http://weblogs.asp.net/scottgu/4331
这个问题已经有答案了: Difference between shutdown and shutdownNow of Executor Service (3 个回答) 已关闭 4 年前。 以下是Exe
这个问题在这里已经有了答案: close vs shutdown socket? (9 个回答) 关闭 5 年前。 在此 MSDN 页面上: Sending and Receiving Data o
我想知道使用elasticsearch shutdown API和终止elasticsearch进程(ctrl + c)之间的区别。我实际上不以正常关闭为答案,因为我想知道发出关闭API调用时ES实际
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
Java 定时器调度任务:servive JVM 关闭? Timer timer = new Timer(); timer.scheduleAtFixedRate(...) JVM关闭后,调度的任务还
这个问题已经有答案了: Difference between shutdown and shutdownNow of Executor Service (3 个回答) 已关闭 5 年前。 我正在检查j
我正在 Windows 10 上的 CPython 3.7 中实现一个 Server 类,其中使用永久启动服务的 Server.serve 方法和 Server.shutdown code> 停止服务
为了避免延长等待时间,建议您在调用 awaitTermination() 之前先调用 shutdown(),因为后者不适合杀死执行者。但是,为了等待任务完成,您是否应该使用 invokeAll() 来
我正在用 Python 为老式计算机系统编写一个模拟器,在摆脱停止状态后尝试“重新启动”模拟器核心线程时,我遇到了一些抛出异常的问题。 “运行处理器”方法是一个更大类的一部分,如下所示: def ru
我有以下代码,用于在端口 8000 上运行本地 HTTP 服务器: # Omitted imports and irrelevant things for brevity. class Threade
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util
我制作了一个程序,它会在设定的时间后关闭 PC。用户使用 2 个旋转框(一个用于小时,另一个用于分钟)输入时间,然后我将它转换为毫秒: ms = (ui->hBox->text().toInt() *
class System { public: virtual ~System() final { Shutdown(); }; virtual void Shu
看下面的代码: public void pinger() { ScheduledThreadPoolExecutor executor = new Schedule
我开发了一个小型 Java 应用程序,在其中使用 Quartz.jar 库。 但是当执行我的应用程序并调用 Quartz 时,我在控制台中收到以下错误消息: org.quartz.SchedulerE
我有 parking 系统的代码。当空格数超过 20 时,它会发送错误消息,因为 20 是空格的限制。我想在此之后尝试关闭程序。 我已尝试做您可以在 Python 中做的事情。这是: import s
我们在 RHEL (jdk 1.7.. 51) 上使用 Neo4j2.0.1 - 我们在一个同步线程上调用 GraphDatabaseService.shutDown(),并且此方法永远不会返回或引发
我是一名优秀的程序员,十分优秀!