直接上代码,代码中有注释(代码中还有一些本人的其他测试,读者可以忽略不计)。读者在代码中发现了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. Linux下查看/管理当前登录用户及用户操作历史记录

    转载自: http://www.cnblogs.com/gaojun/archive/2013/10/24/3385885.html 一.查看及管理当前登录用户 1.使用w命令查看登录用户正在使用的进 ...

  2. LINUX下编译源码时所需提前安装的常用依赖包列表

    yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-deve ...

  3. 《与小卡特一起学Python》 Code6 注释

    """这是一个包括多行的注释, 使用了三重引号字符串. 这不完全是注释,不过也可以相当于注释. """ #***************** ...

  4. android:layout_weight的真实含义(转)

    首先声明只有在Linearlayout中,该属性才有效.之所以Android:layout_weight会引起争议,是因为在设置该属性的同时,设置android:layout_width为wrap_c ...

  5. Oralce 账户被锁后的解决办法

    SQL> connect sys/sys as sysdba; 已连接. SQL> alter user system account unlock; 用户已更改.  www.2cto.c ...

  6. Spring官网下载dist.zip的几种方法

    Spring官网下载dist.zip的几种方法   Spring官网改版后,很多项目的完整zip包下载链接已经隐掉了,虽然Spring旨在引导大家用更“高大上”的maven方式来管理所依赖的jar包, ...

  7. Android Fragment 深度解析

    1.Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套app,然后拷贝一份,修改布局以适应 ...

  8. Android6.0之来电转接号码显示修改

    Android6.0之来电转接号码显示修改 手机来电转接界面是在,点开Dialer-搜索框右边的三个点-设置-通话账户(要先插卡)-中国移动或者中国联通--来电转接--第一行,显示始终转接 将所有来电 ...

  9. 基于Red5的视频直播平台

    搭建环境:Win2008 server + jdk1.8+red5-server-1.0.6 下载地址:https://github.com/Red5 修改启动配置文件(修改为jdk路径): 安装模版 ...

  10. Android NDK 初探,生成so文件以及调用so文件方法

    因为最近业务上涉及安全的问题 然后有一些加密解密的方法和key的存储问题 本来想存储到手机里面,但是网上说一般敏感信息不要存储到手机Sdcard上 而且我这个如果从网络建立通信获取的话,又太耗时,所以 ...