zoukankan      html  css  js  c++  java
  • 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:成功完成数据备份!

     

  • 相关阅读:
    使用ansible 批量分发ssh密钥
    修改DNS
    如何使用openssl生成RSA公钥和私钥对
    压力测试 php-fpm 优化
    mysql 安装
    svn 权限配置
    powerdesigner导出word
    Mysql无法创建外键的原因
    office project 激活
    MySQL日志恢复误删记录
  • 原文地址:https://www.cnblogs.com/mrwhite2020/p/14608871.html
Copyright © 2011-2022 走看看