文档目录:
一、守护线程
二、定时器
---------------------------------------分割线:正文--------------------------------------------------------
一、守护线程
1、概念:
线程分为用户线程与守护线程(如垃圾回收线程)
2、特点:
一般守护线程是一个死循环,所有用户线程只要结束,守护线程自动结束
3、作用:
如每天00:00系统自动数据备份
需要使用定时器,并且可以将定时器设置为守护线程
4、举例说明
1 package JAVAADVANCE;
2
3 import java.util.TreeSet;
4
5 public class TestAdvance39TestThread01 {
6 public static void main(String[] args) {
7 Thread t=new BakDataThread();
8 t.setName("数据备份");
9 //启动线程前将线程设置为守护线程
10 t.setDaemon(true);
11 t.start();
12 //主线程,用户的线程
13 for(int i=0;i<5;i++){
14 System.out.println(Thread.currentThread().getName()+"----->"+i);
15 try {
16 Thread.sleep(1000);
17 } catch (InterruptedException e) {
18 e.printStackTrace();
19 }
20 }
21 }
22 }
23 class BakDataThread extends Thread{
24 @Override
25 public void run() {
26 int i=0;
27 while (true){
28 System.out.println(Thread.currentThread().getName()+"----->"+(++i));
29 try {
30 Thread.sleep(500);
31 } catch (InterruptedException e) {
32 e.printStackTrace();
33 }
34 }
35 }
36 }
查看运行结果:当主线程结束时守护线程结束
1 main----->0
2 数据备份----->1
3 数据备份----->2
4 数据备份----->3
5 main----->1
6 数据备份----->4
7 main----->2
8 数据备份----->5
9 数据备份----->6
110 main----->3
11 数据备份----->7
12 数据备份----->8
13 main----->4
14 数据备份----->9
15 数据备份----->10
二、定时器
1、作用:
间隔特定的时间执行特定的程序。
2、使用场景:
(1)定时数据备份
(2)每周银行账户总账操作
3、实现方式
(1)Java类:java.util.Timer定时器
(2)sprint Task框架,基于Timer
4、举例说明Timer()
1 package JAVAADVANCE;
2
3 import java.sql.SQLOutput;
4 import java.text.ParseException;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7 import java.util.Timer;
8 import java.util.TimerTask;
9
10 public class TestAdvance39TestTimer {
11 public static void main(String[] args) {
12 //创建定时器对象
13 Timer timer=new Timer();
14 //等同于:Timer timer=new Timer(true);
15 //构造时间
16 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
17 Date firstTime= null;
18 try {
19 firstTime = sdf.parse("2020-04-03 00:20:00");
20 } catch (ParseException e) {
21 e.printStackTrace();
22 }
23 //指定定时任务
24 timer.schedule(new LogTimeTask(),firstTime,1000*5);
25 }
26 }
27
28 //编写定时器任务类
29 class LogTimeTask extends TimerTask{
30 @Override
31 public void run() {
32 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
33 String strTime=sdf.format(new Date());
34 System.out.println(strTime+":成功完成数据备份!");
35 }
36 }
查看运行结果:程序5秒执行一次
1 2021-04-03 00:24:37:成功完成数据备份!
2 2021-04-03 00:24:42:成功完成数据备份!
3 2021-04-03 00:24:47:成功完成数据备份!
4 2021-04-03 00:24:52:成功完成数据备份!
5 2021-04-03 00:24:57:成功完成数据备份!
6 2021-04-03 00:25:02:成功完成数据备份!