官网API解释
setDaemon
public final void setDaemon(boolean on)Marks this thread as either a daemon thread or a user thread. The Java Virtual Machine exits when the only threads running are all daemon threads.This method must be invoked before the thread is started.
- Parameters:
on
- iftrue
, marks this thread as a daemon thread- Throws:
IllegalThreadStateException
- if this thread is aliveSecurityException
- ifcheckAccess()
determines that the current thread cannot modify this thread
setDaemon设置线程为守护线程,必须放到start()方法之前,目的是当前所有运行中的线程为守护线程时该线程结束
使用守护线程模拟心跳实验
package com.dwz.concurrency.chapter4; /** * 使用守护线程模拟心跳实验 */ public class DaemonThread2 { public static void main(String[] args) { Thread t = new Thread(() -> { Thread innerThread = new Thread(() -> { try { while(true) { System.out.println("Do some thing for health check."); Thread.sleep(1_000); } } catch (InterruptedException e) { e.printStackTrace(); } }); innerThread.setDaemon(true); innerThread.start(); }); t.start(); try { Thread.sleep(3_000); System.out.println("T Thread finish done."); } catch (InterruptedException e) { e.printStackTrace(); } } }