Heim> Java> javaLernprogramm> Hauptteil

Java 定时器(Timer,TimerTask)详解及实例代码

高洛峰
Freigeben: 2017-01-11 16:14:43
Original
1427 Leute haben es durchsucht

Java 定时器

在JAVA中实现定时器功能要用的二个类是Timer,TimerTask

Timer类是用来执行任务的类,它接受一个TimerTask做参数

Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率,本文有二个例子,一个是简单的一个是用了内部类

1.简单实例

先写一个类

public class TimeTest { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new MyTask(),1000,2000); }
Nach dem Login kopieren

然后再写个类

public class MyTask extends TimerTask{ @Override public void run() { System.out.println("开始运行"); } }
Nach dem Login kopieren

这样就可以完成一个简单的定时器,但是还有一种方法就是把这二个类写入到一个类中,也就是内部类了

2.内部类

public class SerchRun { protected static void startRun(){ Timer timer = new Timer(); TimerTask task =new TimerTask(){ public void run(){ System.out.println("开始运行"); //在这写你要调用的方法 } }; timer.scheduleAtFixedRate(task, new Date(),2000);//当前时间开始起动 每次间隔2秒再启动 // timer.scheduleAtFixedRate(task, 1000,2000); // 1秒后启动 每次间隔2秒再启动 } public static void main(String[] args) { SerchRun.startRun(); } }
Nach dem Login kopieren

schedule和scheduleAtFixedRate的区别在于,如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。

比如:

SimpleDateFormat fTime = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date d1 = fTime.parse("2005/12/30 14:10:00"); t.scheduleAtFixedRate(new TimerTask(){ public void run() { System.out.println("this is task you do6"); } },d1,3*60*1000);
Nach dem Login kopieren

间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,如果我在14:17:00分执行这个程序,那么会立刻打印3次

this is task you do6 //14:10 this is task you do6 //14:13 this is task you do6 //14:16
Nach dem Login kopieren

并且注意,下一次执行是在14:19 而不是 14:20。就是说是从指定的开始时间开始计时,而不是从执行时间开始计时。

但是上面如果用schedule方法,间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,那么在14:17:00分执行这个程序,则立即执行程序一次。并且下一次的执行时间是 14:20,而不是从14:10开始算的周期(14:19)。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多Java 定时器(Timer,TimerTask)详解及实例代码相关文章请关注PHP中文网!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!