标签:demo 需要 数据 ace 结束 ati proc extends 垃圾
Java中又两种线程:
如:我们需要每天的00:00就进行数据的备份,这个时候我们就需要一个定时器线程,并且将该定时器线程设置为守护线程。
守护线程是一直执行的,即死循环,当用户线程执行完毕时,守护线程也执行完毕。
如何设置线程为守护线程?
在线程启动前,setDaemon(true);
例:
package com.dh.daemon;
public class DaemonDemo {
public static void main(String[] args) {
MyThread t = new MyThread();
t.setName("t1");
//设置t为守护线程
t.setDaemon(true);
t.start();
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"--->"+i);
}
}
}
class MyThread extends Thread {
int i = 0;
@Override
public void run() {
//守护线程:死循环
while (true){
System.out.println(Thread.currentThread().getName()+"--->"+(++i));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
结果:
main--->0
t1--->1
main--->1
main--->2
main--->3
main--->4
main--->5
main--->6
main--->7
main--->8
main--->9
当main线程结束时,t1线程也结束了。若没有设置t1线程为守护线程,t1线程就会一直死循环运行。
定时器就是间隔特定的时间,做特定的事情。
sleep()就可以当作是定时器,但是很少使用,因为效率很低。
类库中已经帮我们定义好了一个java.util.Timer定时器类,可以直接使用:
void schedule(TimerTask task, Date firstTime, long period) //从指定的时间开始,间隔指定的时间,做指定的事情
//TimerTask task:要执行的任务(是一个抽象类,需要自己写一个任务类继承TimeTask)
//Date firstTime:开始时间
//long period:间隔时间(单位是毫秒)
以下书写一个定时输出日志到控制台的例子:
package com.dh.timer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
public static void main(String[] args) throws ParseException {
//创建定时器对象
Timer timer = new Timer();
//要实现的任务
MyTask task = new MyTask();
//开始时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse("2021-02-21 23:25 :00");
timer.schedule(task, date, 1000 * 10);
}
}
//任务类
class MyTask extends TimerTask {
//重写run(),在run()中书写需要执行的操作
@Override
public void run() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(new Date());
System.out.println(time + ":进行了日志输出!");
}
}
结果:
2021-02-21 23:25:00:进行了日志输出!
2021-02-21 23:25:10:进行了日志输出!
2021-02-21 23:25:20:进行了日志输出!
2021-02-21 23:25:30:进行了日志输出!
Process finished with exit code -1
程序会一直运行,需要自己手动停止。
标签:demo 需要 数据 ace 结束 ati proc extends 垃圾
原文地址:https://www.cnblogs.com/denghui-study/p/14437953.html