(八)定时器
标准库中的定时器
标准库中提供了一个Timer类。Timer类的核心方法为schedule,schedule 包含两个参数:第⼀个参数指定即将要执行的任务代码,第⼆个参数指定多长时间之后执行(单位为毫秒)。
java
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("hello");
}
}, 3000);
(九)守护线程
不要把操作系统的守护进程和守护线程相提并论
守护线程(Daemon Thread)是一种特殊的线程,它的主要作用是为其他线程提供服务,而不是执行核心业务逻辑。当所有非守护线程(用户线程)结束时,JVM 会自动终止守护线程,即使它们还在执行中。
通过 Thread.setDaemon(true)
方法将线程设置为守护线程,必须在启动线程前设置。
java
public static void main(String[] args) throws InterruptedException {
Thread main = Thread.currentThread();
Thread t = new Thread(() -> {
try {
while (true){
System.out.println("我是守护线程");
Thread.sleep(1000);
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
});
t.setDaemon(true);
t.start();
Thread.sleep(3000);
}
特性:
特性 | 描述 |
---|---|
线程类型判断 | thread.isDaemon() :返回 true 表示守护线程,false 表示用户线程。 |
设置时机 | 必须在 thread.start() 前调用 setDaemon(true) ,否则会抛出 IllegalThreadStateException 。 |
继承性 | 线程创建的子线程会继承父线程的守护状态。例如,守护线程创建的子线程默认是守护线程。 |
终止机制 | 当所有用户线程结束时,JVM 会自动调用 System.exit(0) 终止守护线程,不会等待守护线程完成。 |