线程类的 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。