Java Timer示例
时间:2020-02-23 14:35:16 来源:igfitidea点击:
定时器是一个实用程序类,可用于在特定时间或者重复上安排任务。
让我们说,我们正在开发银行申请,需要在每天晚上7点处理数据。
我们可以使用Timer类轻松安排任务。
为了创建任务,我们需要扩展时间阵列,计时器可用于设置任务的时间。
timertask:它是任务将在特定时间执行。
计时器:它是实用类,用于设置任务的时间。
定时器类是线程安全,所以多个线程可以共享一个计时器对象。
Timer类内部使用java.util.TaskQueue来在内部管理任务。
只有一个线程一次可以执行计时器任务。
例如:
我们正在执行每5秒的任务,但实际执行本身需要10秒钟,然后将添加后续任务将添加到队列中,一旦当前执行完成,它将通知,另一个线程将开始执行任务。
调试计时器对象时,它看起来像这样。
调度任务的方法:
定时器类中有几种方法可以用于计划。
一次执行:
public void schedule(TimerTask task, long delay,long period) For example: //it will execute timer task after delay of 5 seconds timer.schedule(new MyTimerTask(),5000);
对于重复执行:
public void schedule(TimerTask task,long delay) For example: //it will execute timer task in every 2 seconds after first delay of 1 second timer.schedule(new MyTimerTask(),1000,2000);
用于在特定时间执行任务:
public void schedule(TimerTask task, Date time) For example: //Scheduling task at today : 23:13:00 PM Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 13); calendar.set(Calendar.SECOND, 0); Date time = calendar.getTime(); timer.schedule(new MyTimerTask(timer), time);
重复执行特定时间的任务:
public void schedule(TimerTask task, Date firstTime, long period)
例子:
只执行一次:
创建一个类mytimertask.java
package org.igi.theitroad.timer;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask{
Timer timer;
public MyTimerTask(Timer timer) {
this.timer=timer;
}
@Override
public void run() {
System.out.println("Executing timer task");
//to stop timer thread
timer.cancel();
}
}
在上面的类中,我们使用Timer.Cancel()来停止定时器线程。
调用Timer.Cancel()方法时,它完成了当前线程的执行,并丢弃队列中的所有其他线程。
创建一个类timermain.java。
package org.igi.theitroad.timer;
import java.util.Timer;
public class TimerMain {
public static void main(String[] args) {
//It will create new thread
Timer timer=new Timer();
// task will be scheduled after 5 sec delay
timer.schedule(new MyTimerTask(timer), 5000);
}
}
运行上面的程序时,我们将获取以下输出:
Executing timer task
对于重复执行:
创建一个类mytimertask.java
package org.igi.theitroad.timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask{
@Override
public void run() {
System.out.println("Executing timer task on "+TimerMain.convertTimeToDateFormat(System.currentTimeMillis()));
}
}
创建一个类timermain.java。
package org.igi.theitroad.timer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
public class TimerMain {
public static void main(String[] args) {
System.out.println("Timer tasks started on "+convertTimeToDateFormat(System.currentTimeMillis()));
System.out.println("**");
//It will create new thread
Timer timer=new Timer();
timer.schedule(new MyTimerTask(), 1000,2000);
//Stopping the timer thread after some time for example :12 secs.
try {
Thread.sleep(12000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//you can call timer.cancel() or System.exit(0)
System.out.println("**");
System.out.println("Timer tasks finished on "+convertTimeToDateFormat(System.currentTimeMillis()));
System.exit(0);
}
public static String convertTimeToDateFormat(long milliseconds)
{
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm:ss");
Date resultdate = new Date(milliseconds);
return sdf.format(resultdate);
}
}
运行上面的程序时,我们将获取以下输出:
Timer tasks started on Aug 18,2014 22:48:22 ** Executing timer task on Aug 18,2014 22:48:23 Executing timer task on Aug 18,2014 22:48:25 Executing timer task on Aug 18,2014 22:48:27 Executing timer task on Aug 18,2014 22:48:29 Executing timer task on Aug 18,2014 22:48:31 Executing timer task on Aug 18,2014 22:48:33 ** Timer tasks finished on Aug 18,2014 22:48:34
用于在特定时间执行任务:
创建一个类mytimertask.java
package org.igi.theitroad.timer;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask{
Timer timer;
MyTimerTask(Timer timer)
{
this.timer=timer;
}
@Override
public void run() {
System.out.println("Executing timer task on "+TimerMain.convertTimeToDateFormat(System.currentTimeMillis()));
//to stop time thread
timer.cancel();
}
}
创建一个类timermain.java。
package org.igi.theitroad.timer;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class TimerMain {
public static void main(String[] args) {
System.out.println("Timer tasks started on "+convertTimeToDateFormat(System.currentTimeMillis()));
System.out.println("**");
//It will create new thread
Timer timer=new Timer();
//Scheduling task at today : 23:13:00 PM
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 13);
calendar.set(Calendar.SECOND, 0);
Date time = calendar.getTime();
timer.schedule(new MyTimerTask(timer), time);
}
public static String convertTimeToDateFormat(long milliseconds)
{
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm:ss");
Date resultdate = new Date(milliseconds);
return sdf.format(resultdate);
}
}
运行上面的程序时,我们将获取以下输出:
Timer tasks started on Aug 18,2014 23:12:40 ** Executing timer task on Aug 18,2014 23:13:00

