关于java 定时器的使用总结
直接上代码,代码中有注释(代码中还有一些本人的其他测试,读者可以忽略不计)。读者在代码中发现了bug,欢迎指正。
package j2se.system.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
class TestTask extends TimerTask{
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int i = 0;
@Override
public void run(){
//假设现在有一个任务,每天要下午15:00执行
long start = System.nanoTime();
String time = t.format(new Date());
System.out.println("time:"+time+"_____ "+(System.nanoTime()-start)+"____i:"+(++i));
}
} class TestTask2 extends TimerTask{
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int i = 0;
@Override
public void run(){
System.out.println("come in ");
//假设现在有一个任务,每月执行一次 Date d = new Date();//获取服务器的时间。。。
Calendar c= Calendar.getInstance();
c.setTime(d);
int day = c.get(Calendar.DAY_OF_MONTH);
if(day == 19){
long start = System.nanoTime();
String time = t.format(new Date());
System.out.println("time:"+time+"_____ "+(System.nanoTime()-start)+"____i:"+(++i));
}
}
}
public class TimeTaskDemo { public TimeTaskDemo() { } //schedule(TimerTask task, Date time) 安排在指定的时间执行指定的任务。如果已过时间,则立即执行
static void schedule(){
Date date = null;
Timer time = new Timer();
TestTask task = new TestTask();
String s = "2013-06-19 15:33:00";
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = t.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
time.schedule(task, date);
} //schedule(TimerTask task, Date firstTime, long period) 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
static void schedule02(){
Date date = null;
Timer time = new Timer();
TestTask task = new TestTask();
String s = "2013-06-19 15:00:00";
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = t.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
//如果已过时间点会立刻执行一次
time.schedule(task, date,10000);
} //void schedule(TimerTask task, long delay) 安排在指定延迟后执行指定的任务。
static void schedule03(){
Timer time = new Timer();
TestTask task = new TestTask();
time.schedule(task, 10000);
} //schedule(TimerTask task, long delay, long period) 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
static void schedule04(){
Date date = null;
Timer time = new Timer();
TestTask task = new TestTask();
String s = "2013-06-19 15:00:00";
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = t.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
//如果已过时间点会立刻执行一次
time.schedule(task, 5000,10000);
} // void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
// 安排指定的任务在指定的时间开始进行重复的固定速率执行。
static void scheduleAtFixedRateTest01(){
Date date = null;
Timer time = new Timer();
TestTask task = new TestTask();
String s = "2013-06-18 15:30:00";
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = t.parse(s);
} catch (ParseException e) {
e.printStackTrace();
} //如果过了时间点,会联系执行,比如设置2013-06-19 04:45:00运行,但是在2013-06-19 04:50:00运行,会运行多次,次数= (50-45)*60/10-1
//?????????????????????????????????????????????
time.scheduleAtFixedRate(task, date, 10000);
} //scheduleAtFixedRate(TimerTask task, long delay, long period)
//安排指定的任务在指定的延迟后开始进行重复的固定速率执行。
static void scheduleAtFixedRateTest02(){
Timer time = new Timer();
TestTask task = new TestTask();
time.scheduleAtFixedRate(task, 5000, 10000);
} //每天17:24执行
static void scheduleAtFixedRateTest03(){
Date d = new Date();//获取服务器的时间。。。
Calendar c= Calendar.getInstance();
c.setTime(d);
TestTask task = new TestTask();
Timer time = new Timer();
int day = c.get(Calendar.DAY_OF_MONTH);
int hour = c.get(Calendar.HOUR_OF_DAY) ;
int minute = c.get(Calendar.MINUTE) ;
int second = c.get(Calendar.SECOND);
System.out.println(day);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
if(hour >=17 ){
c.set(Calendar.DAY_OF_MONTH,day+1);
//如果要求过了时间点执行一次
task.run();
}
c.set(Calendar.HOUR_OF_DAY,17);
c.set(Calendar.MINUTE,24);
c.set(Calendar.SECOND,0);
Date date = c.getTime();
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(t.format(date));
// time.scheduleAtFixedRate(task, date, 10000);
time.scheduleAtFixedRate(task, date, 24*60*60*1000);
}
//每月19号 17:24执行一次,首先需要在定时器中设定月份,还需要在定时器中的任务执行时,判断当天是不是19号
//比如在TestTask2 中的run方法中进行判断
static void scheduleAtFixedRateTest04(){
int h1 = 17;
int m1 = 57;
int s1 = 0 ; Date d = new Date();//获取服务器的时间。。。
Calendar c= Calendar.getInstance();
c.setTime(d);
TestTask2 task = new TestTask2();
Timer time = new Timer();
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
int hour = c.get(Calendar.HOUR_OF_DAY) ;
int minute = c.get(Calendar.MINUTE) ;
int second = c.get(Calendar.SECOND);
System.out.println(month);
System.out.println(day);
System.out.println(hour);
System.out.println(minute);
System.out.println(second); if(day > 19){
c.set(Calendar.MONTH,month+1);
}else if(day == 19){
if(hour >=h1){
c.set(Calendar.MONTH,month+1);
}
}else{
c.set(Calendar.DAY_OF_MONTH,19);
}
c.set(Calendar.HOUR_OF_DAY,h1);
c.set(Calendar.MINUTE,m1);
c.set(Calendar.SECOND,s1);
Date date = c.getTime();
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(t.format(date));
time.scheduleAtFixedRate(task, date, 10000);
// time.scheduleAtFixedRate(task, date, 24*60*60*1000);
} /**
* @param args
*/
public static void main(String[] args) { // schedule(); // schedule02(); // schedule03(); // schedule04(); // scheduleAtFixedRateTest01(); // scheduleAtFixedRateTest02(); //每天15:00执行
// scheduleAtFixedRateTest03(); //每个月执行一次执行
scheduleAtFixedRateTest04(); }
}
关于java 定时器的使用总结的更多相关文章
- java定时器和多线程实践记录
这几天因为需要测试mongodb读写分离的问题,因此写了个定时查询程序,并且用到了多线程,以达到定时启动多个线程查询数据库的效果,下边代码记录备忘: package timmer; import ja ...
- java定时器,Spring定时器和Quartz定时器
一.java定时器的应用 其实java很早就有解决定时器任务的方法了,java提供了了类java.util.TimerTask类基于线程的方式来实现定时任务的操作,然后再提供java.util.Tim ...
- Java定时器:Timer
项目中往往会遇到需要定时的任务,例如订单,当用户在某个规定时间内没有操作订单时,订单状态将会发生改变. 那么在这种情况下,我们会用到定时器. 举例: import java.util.Timer; / ...
- Java定时器应用
在Java多线程中,有的时候,我们需要按照指定间隔时间来执行一些任务,这时,我们就要用到定时器.我们在这里以Java中的Timer定时器为例,演示定时器的应用. 请看下述代码: import java ...
- java定时器实现总结
前言:Java定时器目前主要有3种实现方式:JDK组件,Spring Task,Quartz框架. 1. JDK组件(1) java.util.TimerTask MyTimerTask.java: ...
- Java定时器TimeTask
package com.alan.timer; import java.util.Calendar;import java.util.Date;import java.util.Timer;impor ...
- Java定时器Timer
Java定时器Timer在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时开始执行某一个任务.Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类,执行计划任 ...
- [Java定时器]用Spring Task实现一个简单的定时器.
今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...
- java定时器的使用
定时器类Timer在java.util包中.使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后 ...
随机推荐
- test homework2 ~ faulty program
Program1:
- MVC文章汇总
http://www.cnblogs.com/yaozhenfa/category/541420.html http://www.cnblogs.com/yubaolee/p/3269043.html ...
- Sublime Text 配置记录
sublime userSetting sublime theme sublime plug sublime userSetting 对sublime的配置 { "color_scheme& ...
- 解决redhat 没注册的情况下yum无法使用的问题
官网下载的rhel,安装后是没有配置yum源的,需要自己配置yum源.网络上的很难找到rhel的yum源,但是在ISO镜像里面有很多redhat提供的软件包,也是正版软件,我们可以把这个拷贝出来 ...
- alter system switch logfile与alter system archive log current的区别
以前知道 ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换, ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例 ...
- java String 的+操作导致的问题
不说别的先看代码截图: 结果如下: 很好奇为什么String对象的null加上了""就等于"null"字符串了,先给点资料看看: 这个是我找的一个人博客上的截图 ...
- tcpdump捕捉样例
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- 字符串0.在php和js中转换为布尔类型 值是false还是true
在php 中 $a = '0'; $b = (bool)$a; var_dump($a);//输出false 在js中官方说明: Note:If the value parameter is omit ...
- 《精通C#》第十二章 Linq
Linq是在.Net3.5之后首次引入的,这种查询语言简单易学,可用范围非常广泛在学着之前,一直用在数据库操作之上,但是在学习这节课之后才发现,凡是实现泛型的接口类型都可以使用linq,简单来说就是实 ...
- UITabBarController
Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·‘“〈<「『[[[〝﹙﹛﹝$(.[{£¥ !%),.:;>?] ...