zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    SVNKit学习——基于Repository的操作之print repository tree、file content、repository history(四)
    java操作svn【svnkit】实操
    python笔记38-使用zmail发各种邮件案例代码
    python笔记37-史上最好用的发邮件zmail
    python笔记3-邮件发送(smtplib)
    第9期《python3接口自动化测试》课程,6月29号开学!
    anyproxy学习4-Linux(Centos)搭建anyproxy环境
    anyproxy学习3-修改返回内容(beforeSendResponse)
    anyproxy学习2-rule模块实现接口mock功能
    anyproxy学习1-windows平台安装和抓手机app上https请求
  • 原文地址:https://www.cnblogs.com/jcb1991/p/13386541.html
Copyright © 2011-2022 走看看