Eclipse调试器:线程与“守护”线程

3
每当我在Eclipse中运行调试配置(一个“调试会话”)时,并切换到Debug Perspective,我总是在调用堆栈视图中看到“Threads”和“Daemon Threads”。
为什么有些线程是守护线程而其他线程只是普通线程?谢谢!
(注:我不是在问什么是守护进程,或者什么是守护线程,只是想知道Eclipse如何确定哪些线程是守护线程。)

只是猜测,但调用isDaemon()方法可能是一种方式。为什么这很重要呢? - ddmps
这只是一个纯粹好奇的问题。如果你的怀疑是正确的,那么我想你可以把我的问题解释为“为什么有些线程是isDaemon(),是什么驱使它们这样?” - IAmYourFaja
有一个 setDaemon() 方法,可以将其设置为守护进程或非守护进程。 - ddmps
你的问题不太清楚 - 如果你所问的唯一事情是在底部的括号中,那么为什么它在底部的括号中?把它放在顶部,并让它听起来不像你不知道 dameon 线程是什么,如果你确实知道的话。 - djechlin
3个回答

5
Java中的守护线程(Daemon threads)是在后台运行的线程(大多由JVM创建),用于执行后台任务(如垃圾回收)。 守护线程用户线程之间的主要区别在于,一旦所有的用户线程完成执行,Java就会终止自身。JVM不会等待守护线程完成其执行。
请注意,您可以通过setDaemon(true)用户线程创建的线程变为守护线程(必须在调用线程的start()方法之前调用)。
为了使程序继续运行,它必须始终有至少一个活动的用户线程
像您一样的Eclipse可以轻松检查线程是否为守护线程,只需使用isDaemon()即可。

根据OP中的“注释”,看起来这并没有回答问题。 - djechlin
@djechlin 请注意,原帖作者在我回答之后修改了问题,我也根据他所做的更改更新了我的回答。 - Maroun
这个问题没有显示任何编辑历史记录,但是我理解如果问题被编辑了,应该始终会有一个编辑历史记录。 - djechlin
@djechlin 可能是我没有读完问题。哈哈。无论如何,我更新了我的答案,感谢您的提醒。 - Maroun

1
守护线程是指已调用setDaemon(true)的任何线程,或者是守护线程的子线程。我猜测eclipse使用isDaemon()方法来确定哪些线程是守护线程。

0

当所有的非守护线程终止时,JVM 将退出。因此,守护线程用于守护任务 - 即不应阻止 JVM 退出的任务。

创建 Thread 对象时,可以在 Thread 上调用 setDaemon(true),将其标记为守护线程。

然后,您可以调用线程上的 isDaemon() 方法来确定该线程是否已被标记为守护线程。

eclipse 调试器只是读取此标志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接