关于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后 ...
随机推荐
- List中存储同一个对象(内容不同)
List中存储同一个对象,前面的会被后存入的对象覆盖,解决方法:每次存入新的对象
- Linux系统下安装Mysql
原文档地址:http://www.itpub.net/thread-1766546-1-1.html 1.在Linux服务器上通过wget命令取得rpm包: wget –c http://dev.my ...
- iOS - Localizable 国际化
1.国际化 开发的移动应用更希望获取更多用户,走向世界,这就需要应用国际化,国际化其实就是多语言,系统会根据当前设备的语言环境来识别 App 中使用中文还是英文. 2.应用内容国际化 1.新建一个名为 ...
- sql 删除数据库表 外键
--/第1步**********删除所有表的外键约束*************************/ DECLARE c1 cursor for select 'alter table ['+ ...
- swagger for c# webapi
最近迷上了前后端分离的开发架构,工作中的项目几乎都采取这种模式,自己主要担任服务端RestFul风格的Webapi开发.那么问题来了,当前端开发人员找我要api说明文档的时候,曾一度非常可耻的冒出过w ...
- vCenter Server Appliance
vCenter Server Appliance https://10.0.0.10:5480
- Rigidbody相关的操作最好放在FixedUpdate中,update中可能会无效果
void Turning() { // Create a ray from the mouse cursor on screen in the direction of the camera. Ray ...
- Web之路笔记之一
简单说一句,现在开始准备面试前端的知识,每天完成相关的任务,记录一些点. 2014秋季学期Web2.0课程习题 <Lab1 - About Me Page> 目标是自己动手写一个粗略的包含 ...
- JAV07接口与继承之动手动脑问题解决
动手动脑:请自行编写代码测试以下特性:在子类中,若要调用父类中被覆盖的方法,可以使用super关键字. 1.源代码: package Work; class A{ public A(){ System ...
- Python 对不均衡数据进行Over sample(重抽样)
需要重采样的数据文件(Libsvm format),如heart_scale +1 1:0.708333 2:1 3:1 4:-0.320755 5:-0.105023 6:-1 7:1 8:-0.4 ...