java - 如何在java中将主线程设为守护线程?

标签 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");
    
    }
}
输出
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 虚拟机退出。

该方法必须在线程启动之前调用。

参数:
上 - 如果 true , 将此线程标记为守护线程

抛出:
  • IllegalThreadStateException - 如果此线程还活着
  • SecurityException - 如果 checkAccess()确定当前
    线程不能修改这个线程。
  • 关于java - 如何在java中将主线程设为守护线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152481/

    相关文章:

    java - 用简单的java蒙特卡罗模拟Pi?

    java - 是否可以在 wifi 网络中设置域名?

    c++ - LLVM:在程序中实现安全的多实例环境

    c# - 单独使用 async/await 而不是 Task Parallel Library 有什么好处?

    android - 编辑 android init.rc 以重新启动第三方守护进程

    java - 在 jvisualvm 中获取正在运行的非守护线程列表

    java - Hibernate 多态性 : instantiating the right class

    c# - 等待另一个线程

    c++ - 通用守护进程/服务器设计 - 最佳实践(C/C++、Linux)

    java - Liferay : Java NullPointer exception