• Timer定时器的实用


    1)Timer的原理:
    (1)timer的触发和调用,都是基于多线程的. 有一个专门的线程触发我们的timer.
    (2)我会准备一个队列,这个队列会排序,马上要执行的timer,会排在前面.
    (3)在插入Timer的时候,我会记录触发的时间,然后我们这个线程会遍历这些timer,时间到了以后,执行timer的任务.
    (4)取消timer,我们就终止线程,终止这些任务.

    2)接口设置:
    new Timer(): 创建一个定时器对象:
    1.创建一个号自增长的id,作为timer的ID
    2.创建一个TimerTask的队列
    3.创建一个线程,等待TimerTask任务

    schedule: 插入一个定时器,插入一个timer到队列

    cancel: 取消定时器对象

    timer管理线程: 定时器如何触发

    3)wait: 释放锁,并且等待到wait上

    4)peek: 取出,不移除
    poll: 取出,且移除

    5)如果头没有到时间,那么就休眠一段时间
    ————————————————
    demo代码:

    package com.example.demo;
    
    import java.util.*;
    
    public class TimerTest {
        public static void main(String [] args){
           // timer1();
           // timer2();
           // timer3();
            timer4();
        }
    
        //在某个时间time执行任务
        public static void timer1(){
            //设定时间
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(new Date());
            calendar.add(calendar.MINUTE,1);
            Date time = calendar.getTime();
            System.out.println("设定时间为:" + time);
    
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    System.out.println("执行了timer1定时任务!");
                }
            }, time);
        }
    
        //在某个时间firstTime开始执行任务,并且每隔一段时间peroid执行一次
        public static void timer2(){
            //设定时间
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(new Date());
            calendar.add(calendar.MINUTE,1);
            Date firstTime = calendar.getTime();
            System.out.println("设定时间为:" + firstTime);
    
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    System.out.println("执行了timer2定时任务!");
                }
            }, firstTime,5000);
        }
    
        //在一定延迟时间delay后开始执行任务
        public static void timer3(){
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    System.out.println("执行了timer3定时任务!");
                }
            }, 5000);
        }
    
        //在一定延迟时间delay后开始执行任务,并且每隔一段时间peroid执行一次
        public static void timer4(){
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    System.out.println("执行了timer4定时任务!");
                }
            }, 5000,3000);
        }
    }
  • 相关阅读:
    MD5加密
    HDU 1800 Flying to the Mars(Trie字典树 upper_bound)
    POJ 3624 Charm Bracelet(01背包 基础)
    hdu 1005 (规律 循环节)
    ZOJ 3710 friends(暴力 枚举 水)
    zoj 3714 Java Beans(枚举 水)
    hdu 1108 最小公倍数(数论基础 水)
    POJ 1797 Heavy Transportation(dijkstra )
    poj 3984 迷宫问题(bfs 打印路径)
    报数游戏(模拟 枚举)
  • 原文地址:https://www.cnblogs.com/jcb1991/p/13386541.html
Copyright © 2020-2023  润新知