如何在Java中将主线程作为守护程序线程?

Har*_*pta 0 java multithreading daemon

我想把主线程作为守护程序线程,但它告诉我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");

    }
}
Output

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)
Run Code Online (Sandbox Code Playgroud)

Cod*_*eji 5

主线程不能设置为守护线程.因为线程可以在运行之前设置守护进程,并且一旦程序启动,主线程就开始运行,因此不能设置为守护进程线程.

正如javadocs中给出的......

public final void setDaemon(boolean on)
Run Code Online (Sandbox Code Playgroud)

将此线程标记为守护程序线程或用户线程.当运行的唯一线程都是守护程序线程时,Java虚拟机将退出.

必须在启动线程之前调用此方法.

参数:on - if true,将此线程标记为守护程序线程

抛出:

  • IllegalThreadStateException - 如果这个帖子还活着的话

  • SecurityException- 如果checkAccess()确定当前线程无法修改此线程.