如何在 java 中将主线程设为守护线程?
How can i make the main Thread as Daemon Thread in java?
我想将主线程设为守护线程,但它显示 IllegalThreadStateException
。
有什么办法吗?
public class DeamonThreads {
public static void main(String[] args) {
System.out.println("Main Started");
System.out.println("Thread type deamon = " + Thread.currentThread().isDaemon());
Thread.currentThread().setDaemon(true);
System.out.println("Thread type deamon = " + Thread.currentThread().isDaemon());
System.out.println("Main End");
}
}
输出
Main Started
Thread type deamon = false
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.setDaemon(Thread.java:1367)
at com.threads.DeamonThreads.main(DeamonThreads.java:8)
主线程不能设置为守护线程。因为线程可以在其 运行 之前设置守护进程,并且一旦程序启动,主线程就会启动 运行,因此不能设置为守护线程。
如 javadocs 中给出...
public final void setDaemon(boolean on)
将此线程标记为守护线程或用户线程。当唯一的线程 运行 都是守护线程时,Java 虚拟机退出。
该方法必须在线程启动前调用。
参数:
on - 如果 true
,将此线程标记为守护线程
投掷:
IllegalThreadStateException
- 如果这个线程还活着
SecurityException
- 如果checkAccess()
确定当前
线程无法修改此线程。
正如其他人已经指出的那样,您不能那样做,但是您想要解决的真正问题是什么?
主线程没有什么特别的,为什么不去掉呢?这对你有用吗?
public static void main(String[] args) {
...create at least one non-daemon thread...
Thread t = new Thread(() -> {
daemon_main(args);
});
t.setDaemon(true);
t.start();
}
public static void daemon_main(String[] args) {
...do whatever else main() did...
}
我想将主线程设为守护线程,但它显示 IllegalThreadStateException
。
有什么办法吗?
public class DeamonThreads {
public static void main(String[] args) {
System.out.println("Main Started");
System.out.println("Thread type deamon = " + Thread.currentThread().isDaemon());
Thread.currentThread().setDaemon(true);
System.out.println("Thread type deamon = " + Thread.currentThread().isDaemon());
System.out.println("Main End");
}
}
输出
Main Started
Thread type deamon = false
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.setDaemon(Thread.java:1367)
at com.threads.DeamonThreads.main(DeamonThreads.java:8)
主线程不能设置为守护线程。因为线程可以在其 运行 之前设置守护进程,并且一旦程序启动,主线程就会启动 运行,因此不能设置为守护线程。
如 javadocs 中给出...
public final void setDaemon(boolean on)
将此线程标记为守护线程或用户线程。当唯一的线程 运行 都是守护线程时,Java 虚拟机退出。
该方法必须在线程启动前调用。
参数:
on - 如果 true
,将此线程标记为守护线程
投掷:
IllegalThreadStateException
- 如果这个线程还活着SecurityException
- 如果checkAccess()
确定当前 线程无法修改此线程。
正如其他人已经指出的那样,您不能那样做,但是您想要解决的真正问题是什么?
主线程没有什么特别的,为什么不去掉呢?这对你有用吗?
public static void main(String[] args) {
...create at least one non-daemon thread...
Thread t = new Thread(() -> {
daemon_main(args);
});
t.setDaemon(true);
t.start();
}
public static void daemon_main(String[] args) {
...do whatever else main() did...
}