`

java.util.concurrent 范例之二:周期性运行

    博客分类:
  • Java
阅读更多
package test;

import static java.util.concurrent.TimeUnit.SECONDS;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
public class TestScheduledThread {
/**
 * @param args
 */
public static void main(String[] args) {
   final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
   final Runnable beeper = new Runnable() {
    int count = 0;
    public void run() {
     System.out.println(new Date() + " beep " + (++count));
    }
   };
   // 1秒钟后运行,并每隔2秒运行一次
   final ScheduledFuture beeperHandle = scheduler.scheduleAtFixedRate(beeper, 1, 2, SECONDS);
   // 2秒钟后运行,并每次在上次任务运行完后等待5秒后重新运行
   final ScheduledFuture beeperHandle2 = scheduler.scheduleWithFixedDelay(beeper, 2, 5, SECONDS);
   // 30秒后结束关闭任务,并且关闭Scheduler
   scheduler.schedule(new Runnable() {
    public void run() {
     beeperHandle.cancel(true);
     beeperHandle2.cancel(true);
     scheduler.shutdown();
    }
   }, 30, SECONDS);
}
}


可能的运行结果:
Mon Jun 06 21:26:52 CST 2011 beep 1
Mon Jun 06 21:26:53 CST 2011 beep 2
Mon Jun 06 21:26:54 CST 2011 beep 3
Mon Jun 06 21:26:56 CST 2011 beep 4
Mon Jun 06 21:26:58 CST 2011 beep 5
Mon Jun 06 21:26:58 CST 2011 beep 6
Mon Jun 06 21:27:00 CST 2011 beep 7
Mon Jun 06 21:27:02 CST 2011 beep 8
Mon Jun 06 21:27:03 CST 2011 beep 9
Mon Jun 06 21:27:04 CST 2011 beep 10
Mon Jun 06 21:27:06 CST 2011 beep 11
Mon Jun 06 21:27:08 CST 2011 beep 12
Mon Jun 06 21:27:08 CST 2011 beep 13
Mon Jun 06 21:27:10 CST 2011 beep 14
Mon Jun 06 21:27:12 CST 2011 beep 15
Mon Jun 06 21:27:13 CST 2011 beep 16
Mon Jun 06 21:27:14 CST 2011 beep 17
Mon Jun 06 21:27:16 CST 2011 beep 18
Mon Jun 06 21:27:18 CST 2011 beep 19
Mon Jun 06 21:27:18 CST 2011 beep 20
Mon Jun 06 21:27:20 CST 2011 beep 21


许多长时间运行的应用有时候需要定时运行任务完成一些诸如统计、优化等工作,比如在电信行业中处理用户话单时,需要每隔1分钟处理话单;网站每天凌晨统计用户访问量、用户数;大型超市凌晨3点统计当天销售额、以及最热卖的商品;每周日进行数据库备份;公司每个月的10号计算工资并进行转帐等,这些都是定时任务。通过 java 的并发库concurrent可以轻松的完成这些任务,而且非常的简单。

为了退出进程,上面的代码中加入了关闭Scheduler的操作。而对于24小时运行的应用而言,是没有必要关闭Scheduler的。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics