Hui*_*ang 6 java multithreading daemon
我正在做java过去的试卷,我遇到了令我困惑的以下问题.
以下哪项是真的?(选择所有适用的选项.)
A.当应用程序开始运行时,有一个守护程序线程,其作用是执行main().
B.当应用程序开始运行时,有一个非守护程序线程,其作用是执行main().
C.守护程序线程创建的线程最初也是一个守护程序线程.
D.由非守护程序线程创建的线程最初也是非守护程序线程.
关键答案是B,C,D,谁能告诉我为什么B,C是正确的?非常感谢.
A.当应用程序开始运行时,有一个守护程序线程,其作用是执行main().
这是不正确的.见下文.
B.当应用程序开始运行时,有一个非守护程序线程,其作用是执行main().
正确.当最后一个非守护程序线程退出时,JVM退出.如果主线程不是非守护进程,则JVM将启动并看到没有非守护进程线程正在运行并将立即关闭.
因此,主线程必须是非守护程序线程.有关守护程序和非守护程序之间的不同的描述,请参阅我的答案:守护程序线程和低优先级线程之间的区别
C.守护程序线程创建的线程最初也是一个守护程序线程.
D.由非守护程序线程创建的线程最初也是非守护程序线程.
两者都是正确的.该线程默认从产生它的线程获取其守护进程状态.守护程序线程产生其他守护程序线程.非守护程序线程产生其他非守护程序线程.查看以下代码Thread.init()
:
Thread parent = currentThread();
...
this.daemon = parent.isDaemon();
Run Code Online (Sandbox Code Playgroud)
如果要更改守护程序状态,则必须在启动线程之前执行此操作.
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();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9709 次 |
最近记录: |