丨钢琴丶

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);
    }
}

 

posted on 2020-07-27 17:25  丨钢琴丶  阅读(271)  评论(0编辑  收藏  举报

导航