1.线程分类
用户线程:用户线程没有运行完成,程序就不会退出。
守护线程:任何一个守护线程都是整个程序中所有用户线程的守护者,守护线程会跟随用户线程活着,如果最后一个用户线程运行完成,守护线程就会跟着最后一个用户线程一起结束。
守护线程的用处?
jvm垃圾清理线程
一个简单的守护线程Demo
public class DaemonDemo implements Runnable{
@Override
public void run() {
while (true) {
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(1000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws InterruptedException{
Thread thread = new Thread(new DaemonDemo(),"守护线程测试线程");
/**
* setDaemon(true)一定要写在 start()之前,
* 否则会报错“java.lang.IllegalThreadStateException”
* 并且 thread 会作为用户线程执行
*/
thread.setDaemon(true);
thread.start();
thread.sleep(2000l);
}
运行结果
守护线程测试线程
守护线程测试线程
守护线程测试线程
如果将thread.setDaemon(true);放到start()后面,运行结果为:
守护线程测试线程
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.setDaemon(Thread.java:1359)
at threadTest.DaemonDemo.main(DaemonDemo.java:20)
守护线程测试线程
守护线程测试线程
守护线程测试线程
守护线程在日常并不常用,因为它是不可控的,不要在守护线程中进行读写操作,执行计算逻辑。