Java 如果JVM崩溃,线程是否仍然存在?

Java 如果JVM崩溃,线程是否仍然存在?,java,multithreading,jvm,Java,Multithreading,Jvm,我在一次采访中被问到这个问题,有人知道吗?如果JVM由于崩溃而退出,线程将不再存在。如果崩溃是某种内存不足或类似错误,则它可能存在,也可能不存在,具体取决于具体情况 如果JVM由于崩溃而退出,线程将不再存在。如果崩溃是某种内存不足或类似错误,则它可能存在,也可能不存在,具体取决于具体情况 如果线程正在运行,JVM没有崩溃 然而,有时人们错误地将抛出的任何异常描述为崩溃。如果这是采访者的意思,我会说线程仍然在运行,因为异常被捕获而没有重新启动。如果线程正在运行,JVM没有崩溃 然而,有时人们错误地

我在一次采访中被问到这个问题,有人知道吗?

如果JVM由于崩溃而退出,线程将不再存在。如果崩溃是某种内存不足或类似错误,则它可能存在,也可能不存在,具体取决于具体情况

如果JVM由于崩溃而退出,线程将不再存在。如果崩溃是某种内存不足或类似错误,则它可能存在,也可能不存在,具体取决于具体情况

如果线程正在运行,JVM没有崩溃


然而,有时人们错误地将抛出的任何异常描述为崩溃。如果这是采访者的意思,我会说线程仍然在运行,因为异常被捕获而没有重新启动。

如果线程正在运行,JVM没有崩溃


然而,有时人们错误地将抛出的任何异常描述为崩溃。如果这是采访者的意思,我会说线程仍然在运行,因为异常被捕获而没有重新启动。

如果包含JVM的进程关闭,那么它的所有线程也会关闭。当操作系统清理分配给给定进程的所有内存时,这将在操作系统级别处理

我提到进程级闭包是为了将它与JVM可能进入的其他奇怪的未知状态区分开来,这些状态使它保持运行,但处于未知状态(例如,可能它实际上没有做任何事情)


类似地,如果杀死该进程,则所有子线程都将关闭,无论其类型如何(守护进程/非守护进程)。

如果包含JVM的进程关闭,则其所有线程也将关闭。当操作系统清理分配给给定进程的所有内存时,这将在操作系统级别处理

我提到进程级闭包是为了将它与JVM可能进入的其他奇怪的未知状态区分开来,这些状态使它保持运行,但处于未知状态(例如,可能它实际上没有做任何事情)


类似地,如果您终止进程,所有子线程都将关闭,而不管它们的类型(守护进程/非守护进程)。

假设您是JVM。你走在路上,没有真正看清楚你要去哪里,你发生了致命的事故。在不幸发生前的一瞬间,你脑子里有30件事。把你脑子里的那些东西想象成“线”


当你被从道路上扫地出门时,你是否认为你仍然有意识并将所有这些事情都记在心里?

想象你是JVM。你走在路上,没有真正看清楚你要去哪里,你发生了致命的事故。在不幸发生前的一瞬间,你脑子里有30件事。把你脑子里的那些东西想象成“线”


当你被扫地出门的时候,你认为你还会有意识地考虑所有这些事情吗?

JVM的执行实例就是一个过程

线程是进程的一部分

如果这个过程是死的,那么它所包含的一切都是死的

因此,当JVM崩溃或被强制终止时,它创建的所有线程也会停止执行


此外,当JVM中运行的线程只有守护进程线程时,JVM会自动终止。

JVM的执行实例是一个进程

线程是进程的一部分

如果这个过程是死的,那么它所包含的一切都是死的

因此,当JVM崩溃或被强制终止时,它创建的所有线程也会停止执行


此外,当JVM中运行的线程只有守护进程线程时,JVM会自动终止。

什么线程?你所说的“崩溃”是什么意思?线程将运行在什么位置?如果在采访中有人问我这个问题,我会让他们澄清他们的意思……绿色线程、POSIX线程或JVM实现特定的线程对象?这让我想起了“一只空载燕子的空气速度是多少?”并不是每个面试问题都要逐字回答,模糊的问题会提示你是否会问正确的后续问题。@Edwin Buck有没有办法让一个进程创建的线程比创建进程存活更长的时间?我会对此感到非常惊讶(但谁知道呢,可能是posix标准中的一些奇怪的情况呢?),如果不是的话,JVM创建的线程在崩溃后将无法生存。现在JVM可以创建一个新进程并在那里生成线程,但是这个线程不是由JVM创建的。什么线程?你所说的“崩溃”是什么意思?线程将运行在什么位置?如果在采访中有人问我这个问题,我会让他们澄清他们的意思……绿色线程、POSIX线程或JVM实现特定的线程对象?这让我想起了“一只空载燕子的空气速度是多少?”并不是每个面试问题都要逐字回答,模糊的问题会提示你是否会问正确的后续问题。@Edwin Buck有没有办法让一个进程创建的线程比创建进程存活更长的时间?我会对此感到非常惊讶(但谁知道呢,可能是posix标准中的一些奇怪的情况呢?),如果不是的话,JVM创建的线程在崩溃后将无法生存。现在JVM可以创建一个新的进程并在那里生成线程,但是线程不是由JVM创建的。。