java - JVM 可以在应用程序运行时(突然)杀死计时器/守护线程吗?

标签 java jvm java-8 java-7 jvm-crash

我计划创建一个像计时器一样的线程。我将使用 sleep 在特定延迟后重新触发操作..
我担心 JVM 是否可以在不关闭应用程序的情况下突然终止我的线程,
因此,如果应用程序正在运行并且该线程终止,我的功能将无法获得新的 token 。
要么我必须编写一些手动功能来重新启动它。

所以我的问题是:JVM 可以突然终止任何线程吗?

安排任务的最佳解决方案是什么?由于我的任务执行时间是在运行时到来的,因此我无法使用固定计划执行器。

最佳答案

据我所知,JVM 不会随机终止任何线程,因为这会导致所有 Java 程序出现未定义的行为。但是,如果没有非守护线程的正在运行的线程,JVM 将自行关闭并杀死任何标记为守护线程的正在运行的线程。

引用自Thread::setDaemon :

Marks this thread as either a daemon thread or a user thread. The Java Virtual Machine exits when the only threads running are all daemon threads.

要重复安排任务,您应该使用 ScheduledExecutorService只要有可能。事实上,您在运行时遇到延迟并不妨碍您这样做。

另请参阅:Invoking a java Timer-Task from the timer thread

关于java - JVM 可以在应用程序运行时(突然)杀死计时器/守护线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36190992/

相关文章:

java - HashMap 何时以及如何将桶从链表转换为红黑树?

来自修改后的集合的 Java 8 流

c# - 使用 C# 问题打开 Java 控制台

java - 在 Eclipse Dali 中安装/更新 EclipseLink

java - 当多个java程序在同一台机器上运行时

memory - 我想从内存中删除 PrivateKey (sun.security.rsa.RSAPrivateCrtKeyImpl) 的 secret 信息?

java - 使用单个美元符号 `$` 作为 java 类名有什么风险吗?

Java 6 - 创建并检测高于 Long.MAX_VALUE 的第一个 double 值

java - 安卓工作室 : Unboxing of 'xxx' may produce 'java.lang.NullPointerException'

java - 通过 docker-compose 将 JAVA_OPTS 传递给 spring boot 应用程序