直接上代码,代码中有注释(代码中还有一些本人的其他测试,读者可以忽略不计)。读者在代码中发现了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 定时器的使用总结的更多相关文章

  1. java定时器和多线程实践记录

    这几天因为需要测试mongodb读写分离的问题,因此写了个定时查询程序,并且用到了多线程,以达到定时启动多个线程查询数据库的效果,下边代码记录备忘: package timmer; import ja ...

  2. java定时器,Spring定时器和Quartz定时器

    一.java定时器的应用 其实java很早就有解决定时器任务的方法了,java提供了了类java.util.TimerTask类基于线程的方式来实现定时任务的操作,然后再提供java.util.Tim ...

  3. Java定时器:Timer

    项目中往往会遇到需要定时的任务,例如订单,当用户在某个规定时间内没有操作订单时,订单状态将会发生改变. 那么在这种情况下,我们会用到定时器. 举例: import java.util.Timer; / ...

  4. Java定时器应用

    在Java多线程中,有的时候,我们需要按照指定间隔时间来执行一些任务,这时,我们就要用到定时器.我们在这里以Java中的Timer定时器为例,演示定时器的应用. 请看下述代码: import java ...

  5. java定时器实现总结

    前言:Java定时器目前主要有3种实现方式:JDK组件,Spring Task,Quartz框架. 1. JDK组件(1) java.util.TimerTask MyTimerTask.java: ...

  6. Java定时器TimeTask

    package com.alan.timer; import java.util.Calendar;import java.util.Date;import java.util.Timer;impor ...

  7. Java定时器Timer

    Java定时器Timer在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时开始执行某一个任务.Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类,执行计划任 ...

  8. [Java定时器]用Spring Task实现一个简单的定时器.

    今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...

  9. java定时器的使用

    定时器类Timer在java.util包中.使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后 ...

随机推荐

  1. 21.TFS文件系统搭建笔记

    TFS文件系统搭建笔记 参考地址: https://github.com/alibaba/tfs/blob/master/INSTALL.md https://github.com/alibaba/t ...

  2. js设计模式总结-单例模式

    单例模式 解决的问题 保证实例只有一个,避免多个实现,从全局来看,这个实例的状态是唯一的. 实现原理 设置一个变量来记录实例,通过检测该变量是否为空来决定是否创建实例 非透明单例 所谓非透明就是用户在 ...

  3. 使用Gson转换json数据为Java对象的一个例子

    记录工作中碰到的一个内容. 原料是微信平台的一个接口json数据. { "errcode" : 0, "errmsg" : "ok", &q ...

  4. sublime text2 换主题

    网上看到一款喜欢的主题,换掉初始的主题,感觉颜色浅一点会比较好看,看中了下面这款. 后来看到有在 github 上的人做的 ,这是地址 ,上面也有详细的如何更改的步骤,下面是我自己这里做个备份. 1. ...

  5. an interview question(2)

    感觉现在好多面试题还是很注重基础的,今天面试时就遇到这题,回来一查后才知道此题是国内某著名通信公司的一道机试题:) 给定一个数组input[ ],如果数组长度n为奇数,则将数组中最大的元素放到 out ...

  6. Qt编程'""hello world

    #include<QApplication>#include<QLabel>int main(int argc,char*argv[]){QApplicatin app(arg ...

  7. 特许金融分析师 (CFA) 持证人现在一般在做什么工作?职业分布是怎样的?

    特许金融分析师 (CFA) 持证人现在一般在做什么工作?职业分布是怎样的?  陈雨桐 1. 全球范围: 根据 CFA 协会 2014 年 6 月的报告: CFA Institute has over ...

  8. sublime必备插件

    安装插件 安装插件时,先使用Ctrl+Shift+P(Tools→Command Palette...)打开控制面板,输入PackageControl  回车  显示. 选择Package Contr ...

  9. python 安装MySQLdb mysql_config not fount

    缺少 libmysqlclient-dev 应该是安装MySQL的锅. 资料:http://www.cnblogs.com/xiazh/archive/2012/12/12/2814289.html ...

  10. python——有一种线程池叫做自己写的线程池

    这周的作业是写一个线程池,python的线程一直被称为鸡肋,所以它也没有亲生的线程池,但是竟然被我发现了野生的线程池,简直不能更幸运~~~于是,我开始啃源码,实在是虐心,在啃源码的过程中,我简略的了解 ...