ava进阶(39)--守护线程与定时器

文档目录:

一、守护线程

二、定时器

---------------------------------------分割线:正文--------------------------------------------------------

一、守护线程

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:成功完成数据备份!

 

原文地址:https://www.cnblogs.com/mrwhite2020/p/14608871.html