首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java守护进程线程和非守护进程线程

java守护进程线程和非守护进程线程
EN

Stack Overflow用户
提问于 2013-10-21 22:09:00
回答 3查看 16.2K关注 0票数 11

我正在做java过去的试卷,我遇到了下面的问题,这让我很困惑。

下列哪一项是真的?(选择所有适用的。)

当应用程序开始运行时,有一个守护进程线程,其任务是执行main()。

当应用程序开始运行时,有一个非守护进程线程,其任务是执行main()。

由守护进程线程创建的线程最初也是守护进程线程。

由非守护进程线程创建的线程最初也是非守护进程线程.

答案是B,C,D,有人能告诉我为什么B,C是正确的吗?非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-21 22:11:45

当应用程序开始运行时,有一个守护进程线程,其任务是执行main()。

这是错误的。见下文。

当应用程序开始运行时,有一个非守护进程线程,其任务是执行main()。

对,是这样。JVM在最后一个非守护进程线程退出时退出。如果主线程不是非守护进程,那么JVM将启动并看到没有非守护进程线程正在运行,并且会立即关闭。

因此,主线程必须是非守护进程线程。有关守护进程和非守护进程之间区别的描述,请参见我在这里的回答:守护进程线程与低优先级线程之间的差异

由守护进程线程创建的线程最初也是守护进程线程。 由非守护进程线程创建的线程最初也是非守护进程线程.

两者都是正确的。线程从默认生成它的线程获取其守护进程状态。守护进程线程生成其他守护进程线程。非守护进程线程生成其他非守护进程线程。查看来自Thread.init()的代码

代码语言:javascript
运行
复制
Thread parent = currentThread();
...
this.daemon = parent.isDaemon();

如果要更改守护进程状态,则必须在线程启动之前进行更改。

代码语言:javascript
运行
复制
Thread thread = new Thread(...);
// thread has the daemon status of the current thread
// so we have to override it if we want to change that
thread.setDaemon(true);
// we need to set the daemon status _before_ the thread starts
thread.start();
票数 13
EN

Stack Overflow用户

发布于 2013-10-22 12:08:50

来自线程文档

由守护进程线程创建的线程最初也是一个守护进程线程。

每个线程也可以标记为守护进程,也可以不标记。当运行在某个线程中的代码创建一个新的thread对象时,新线程的优先级最初设置为等于创建线程的优先级,并且是一个守护进程线程当且仅当创建线程是一个守护进程。

当应用程序开始运行时,有一个非守护进程线程,其任务是执行main()。

当一个Java Virtual Machine starts up, there is usually a single non-daemon thread (通常是某个指定类的calls the method named main )时。Java虚拟机继续执行线程,直到出现以下任何一种情况:

  • 已经调用了类Runtime的退出方法,并且安全管理器允许进行退出操作。
  • 所有不是守护进程线程的线程都已死亡,方法是从对run方法的调用中返回,或者抛出一个在run方法之外传播的异常。

守护进程和非守护进程线程

只要程序正在运行,“守护进程”线程就应该在后台提供通用服务,但并不是程序本质的一部分。因此,当所有非守护进程线程完成时,程序将被终止.相反,如果有任何非守护进程线程仍在运行,则程序不会终止。

要获得更多解释,请参阅ThinkingInJava

票数 4
EN

Stack Overflow用户

发布于 2019-03-13 05:57:08

Daemons线程是那些不会阻止JVM退出的线程。例如:垃圾回收是一个守护进程线程。

非守护进程线程是那些与主线程类似的线程,在主线程的退出时,JVM也会退出,即程序也会完成。

默认情况下,所有线程都是非守护进程.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19505682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档