Java Thread setDaemon()方法

Thread類的setDaemon()方法用於將線程標記為守護程式線程或用戶線程。 它的生命依賴於用戶線程,即當所有用戶線程都消亡時,JVM會自動終止該線程。必須線上程啟動之前調用它。

如果在聲明線程後調用setDaemon()方法,則此方法將拋出IllegalThreadStateException

語法

public final void setDaemon(boolean on)

參數

  • on - 如果為true,則將該線程標記為守護程式線程。

返回值

如果線程是守護進程線程,則此方法將返回true,否則返回false

異常

  • IllegalThreadStateException:如果線程處於活動狀態。
  • SecurityException:如果當前線程無法修改線程。

示例

public class JavaSetDaemonExp1 extends Thread
{
    public void run()
    {
        //checking for daemon thread
        if(Thread.currentThread().isDaemon())
        {
            System.out.println("daemon thread work");
        }
        else
        {
            System.out.println("user thread work");
        }
    }
    public static void main(String[] args)
    {
        // creating three threads
        JavaSetDaemonExp1 t1=new JavaSetDaemonExp1();
        JavaSetDaemonExp1 t2=new JavaSetDaemonExp1();
        JavaSetDaemonExp1 t3=new JavaSetDaemonExp1();
        // set user thread t1 to daemon thread
        t1.setDaemon(true);
        //call run() method
        t1.start();
        // set user thread t2 to daemon thread
        t2.setDaemon(true);
        // start of threads
        t2.start();
        t3.start();
    }
}

執行上面示例代碼,得到以下結果:

daemon thread work
daemon thread work
user thread work

示例二

線上程啟動後調用setDaemon()方法時。

public class JavaSetDaemonExp2 extends Thread
{
    public void run()
    {
        System.out.println("Name of thread: "+Thread.currentThread().getName());
        // //checking for daemon thread
        System.out.println("Daemon: "+Thread.currentThread().isDaemon());
    }
    public static void main(String[] args)
    {
        // creating two threads
        JavaSetDaemonExp2 t1=new JavaSetDaemonExp2();
        JavaSetDaemonExp2 t2=new JavaSetDaemonExp2();
        // call run() method
        t1.start();
        // this will throw exception here
        t1.setDaemon(true);
        // call run() method
        t2.start();
    }
}

執行上面示例代碼,得到以下結果:

Name of thread: Thread-0
Daemon: false
Exception in thread "main" java.lang.IllegalThreadStateException
    at java.lang.Thread.setDaemon(Thread.java:1359)
    at JavaSetDaemonExp2.main(JavaSetDaemonExp2.java:17)

上一篇: Java Runtime類 下一篇:無