線程類的 setDaemon() 方法用於將線程標記為守護線程或用戶線程。它的生命周期取決於用戶線程,即當所有用戶線程都死掉時,JVM 會自動終止該線程。它必須在線程啟動之前調用。
如果在線程聲明後調用 setDaemon() 方法,該方法將拋出 IllegalThreadStateException。
用法
public final void setDaemon(boolean on)
參數
on:如果為真,則將該線程標記為守護線程。
返回
如果線程是守護線程,則此方法將返回 true,否則返回 false。
異常
非法線程狀態異常:如果線程還活著。
SecurityException: 如果當前線程不能修改線程。
例子1
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
例子2
在線程啟動後調用 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 Thread setDefaultUncaughtExceptionHandler()用法及代碼示例
- Java Thread setContextClassLoader()用法及代碼示例
- Java Thread setName()用法及代碼示例
- Java Thread setPriority()用法及代碼示例
- Java Thread suspend()用法及代碼示例
- Java Thread sleep()用法及代碼示例
- Java Thread stop()用法及代碼示例
- Java Thread start()用法及代碼示例
- Java Thread toString()用法及代碼示例
- Java Thread interrupted()用法及代碼示例
- Java Thread destroy()用法及代碼示例
- Java Thread holdLock()用法及代碼示例
- Java Thread getContextClassLoader()用法及代碼示例
- Java Thread getThreadGroup()用法及代碼示例
- Java Thread isInterrupted()用法及代碼示例
- Java Thread enumerate()用法及代碼示例
- Java Thread notify()用法及代碼示例
- Java Thread resume()用法及代碼示例
- Java Thread activeCount()用法及代碼示例
- Java Thread isDaemon()用法及代碼示例
注:本文由純淨天空篩選整理自 Java Thread setDaemon() method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。