周期性的操作:使用java.util.Timer

编程技术  /  houtizong 发布于 3年前   70

转自:piky2004的专栏

 

在应用开发中,经常需要一些周期性的操作,比如每5分钟检查一下新邮件等。对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。比如下面的代码每5分钟检查一遍是否有新邮件:

private java.util.Timer timer;timer = new Timer(true);timer.schedule(new java.util.TimerTask() { public void run() { //server.checkNewMail(); 检查新邮件 } }, 0, 5*60*1000);

 

使用这几行代码之后,Timer本身会每隔5分钟调用一遍server.checkNewMail()方法,不需要自己启动线程。Timer本身也是多线程同步的,多个线程可以共用一个Timer,不需要外部的同步代码。
在《The Java Tutorial》中有更完整的例子:

public class AnnoyingBeep { T oolkit toolkit; Timer timer; public AnnoyingBeep() {  toolkit = Toolkit.getDefaultToolkit();  timer = new Timer();  timer.schedule(new RemindTask(), 0, //initial delay 1*1000); //subsequent   rate }class RemindTask extends TimerTask {   int numWarningBeeps = 3;   public void run() {    if (numWarningBeeps > 0) {    toolkit.beep();     System.out.println("Beep!");     numWarningBeeps--;    }    else {     toolkit.beep();     System.out.println("Time´s up!");     //timer.cancel(); //Not necessary because we call       System.exit System.exit(0);     //Stops the AWT thread (and everything else)    }   }  }  ...} 

这段程序,每隔3秒响铃一声,并打印出一行消息。循环3次。程序输出如下:
Task scheduled.
Beep!
Beep! //one second after the first beep
Beep! //one second after the second beep
Time´s up! //one second after the third beep

 

Timer类也可以方便地用来作为延迟执行,比如下面的代码延迟指定的时间(以秒为单位)执行某操作。类似电视的延迟关机功能。

 

public class ReminderBeep {public ReminderBeep(int seconds) {  toolkit = Toolkit.getDefaultToolkit();  timer = new Timer();  timer.schedule(new RemindTask(), seconds*1000);  }  class RemindTask extends TimerTask {   public void run() {    System.out.println("Time´s up!");    toolkit.beep();    //timer.cancel(); //Not necessary because we call     System.exit System.exit(0);    //Stops the AWT thread (and everything else)   }  } ... }} 

 

下一篇:SWT-Menu篇

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客