package javatest.timetest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* Java 定时器的使用
* Created by Lovell on 01/12/2016.
*/
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@ @@ @@ @@@@
@@@@ @@@@@@@@ @@@@ @@ @@@ @@@
@@@@ @@@ @@ @@@@ @@ @@@@ @@@
@@@@ @@@@ @@ @@@@ @@ @@@ @@@
@@@@ @@ @@ @@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*/
public class TimeTest {
public static void main(String[] args) throws ParseException {
// timer1();
// timer2();
// timer3();
// timer4();
timer5();
}
// 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)
public static void timer1() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("-------设定要指定任务--------");
}
}, 2000);// 设定指定的时间time,此处为2000毫秒
}
// 第二种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行
// schedule(TimerTask task, long delay, long period)
public static void timer2() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("-------设定要指定任务--------");
}
}, 1000, 5000);
}
// 第三种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行。
// scheduleAtFixedRate(TimerTask task, long delay, long period)
public static void timer3() {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.println("-------设定要指定任务--------");
}
}, 1000, 2000);
}
// 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行.
// Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
public static void timer4() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时
calendar.set(Calendar.MINUTE, 0); // 控制分
calendar.set(Calendar.SECOND, 0); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.println("-------设定要指定任务--------");
}
}, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行
}
/**
* timer的缺点:
*(1)Timer对调度的支持是基于绝对时间,而不是相对时间的,由此任务对系统时钟的改变是敏感的;
*(2)所有的TimerTask只有一个线程TimerThread来执行,因此同一时刻只有一个TimerTask在执行;
*(3)Timer线程并不捕获异常,所以任何一个TimerTask的执行异常都会导致Timer终止所有任务;
* 这种情况下,Timer也不会再重新恢复线程的执行了;它错误的认为整个Timer都被取消了。
* 此时,已经被安排但尚未执行的TimerTask永远不会再执行了,新的任务也不能被调度了。
* @throws ParseException
*/
private static void timer5() throws ParseException {
Timer myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("1s后执行");
}
}, 1000);//1秒后执行
// 2016-12-01 14:33:00执行
myTimer.schedule(new TimerTask() {
@Override
public void run() {
}
}, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-12-01 14:33:00"));
myTimer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("5秒后执行,每一秒执行一次");
}
}, 5000, 1000);//5秒后执行 每一秒执行一次
// 2016-12-01 14:30:00执行一次 以后每秒执行一次,如果设定的时间点在当前时间之前,任务会被马上执行,然后开始按照设定的周期定时执行任务
myTimer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(" 2016-12-01 14:30:00执行一次 以后每秒执行一次,如果设定的时间点在当前时间之前,任务会被马上执行,然后开始按照设定的周期定时执行任务");
}
}, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-12-01 14:33:00"), 1000);
myTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("5秒后执行 每一秒执行一次 如果该任务因为某些原因(例如垃圾收集)而延迟执行,那么接下来的任务会尽可能的快速执行,以赶上特定的时间点");
}
}, 5000, 1000);//5秒后执行 每一秒执行一次 如果该任务因为某些原因(例如垃圾收集)而延迟执行,那么接下来的任务会尽可能的快速执行,以赶上特定的时间点
myTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("和上个类似");
}
}, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-12-01 14:33:00"), 1000);//和上个类似
}
}
java 定时器 延迟加载 java定时器规则
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Spring --- java定时器,Spring定时器和Quartz定时器
当前java程序中 能够实现定时的 主要有 三种 方式 ,分别是: java定时
spring java spring定时器 定时任务 java定时器 -
java定时器事务设置 java定时器规则
java定时器的使用 schedule(TimerTask task, Date time)设定指定任务task在指定时间time运行。 cancel()方法结束这个定
java定时器事务设置 java java定时器 抽象类 -
java 定时器 跳出定时器 java定时器暂停
一、定时器定时器在操作系统中地位很高,可以用来控制一切周期性行为。定时器采用中断的形式,工作原理如下图: 二、定时器优化以前我在做单片机项目的时候,总感觉定时器中断数量太少(一般是两个),通过这次《30天》操作系统的学习,我才意识到不是定时器少,而是自己的编程思路有问题。理论上讲,你可以实现任何时间粒度的定时器中断编程,无非就是在基本时钟中断频率的基础上用倍数来获取任意时间间隔
java 定时器 跳出定时器 java定时器的使用(timer) 在定时器中返回给视图的值 时间间隔 图层