根据android文档:
当代码在某个线程中运行时,会创建一个新的 Thread
对象时,新线程的优先级最初设置为等于创建线程的优先级,并且仅当创建线程是守护进程时,新线程才是守护进程线程。
在这里使用“当且仅当”这个表达正确吗?
我想我们可以用 setDaemon(true)
,即使主线程是非守护线程。
我想知道我是否误解了这个概念。
以下是我尝试的代码:
public class MyClass {
public static void main(String[] args) {
boolean isDaemon;
isDaemon = Thread.currentThread().isDaemon();
System.out.println("Is main thread daemon?:" + isDaemon);
new WorkerThread(true).start();
}
}
class WorkerThread extends Thread {
public WorkerThread(boolean tf) {
setDaemon(tf);
}
public void run() {
boolean isDaemon;
isDaemon = Thread.currentThread().isDaemon();
System.out.println("Is worker thread daemon?:" + isDaemon);
}
}
1条答案
按热度按时间jk9hmnmh1#
你的理解是正确的,但文件也是正确的。
当您创建一个新线程时,从它的创建线程继承它的守护程序状态,此时新线程是守护程序当且仅当创建线程也是守护程序时。
之后你可以打电话
setDaemon(...)
并更改守护进程状态,但这不会使原始声明无效。最初的声明基本上只讨论线程的创建,而不是它未来的生命周期/配置。问题中的代码只是将守护进程标志的更改移到了其他地方。当你打电话的时候
setDaemon(tf);
线程已经配置为非守护进程,您只需更改该配置即可。请注意,android规范只讨论了Thread
,从技术上讲,文档与您的案例完全无关,因为您处理的是WorkerThread
. 实际上,大多数文档仍然是正确的,但确切地说,关于线程继承守护程序状态的语句不再是正确的,因为您显式地更改了该行为。