首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-12-19 
java.util.concurrent 范例之二:周期性运行package testimport static java.util.concurrent.TimeUnit.SE

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

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 1Mon Jun 06 21:26:53 CST 2011 beep 2Mon Jun 06 21:26:54 CST 2011 beep 3Mon Jun 06 21:26:56 CST 2011 beep 4Mon Jun 06 21:26:58 CST 2011 beep 5Mon Jun 06 21:26:58 CST 2011 beep 6Mon Jun 06 21:27:00 CST 2011 beep 7Mon Jun 06 21:27:02 CST 2011 beep 8Mon Jun 06 21:27:03 CST 2011 beep 9Mon Jun 06 21:27:04 CST 2011 beep 10Mon Jun 06 21:27:06 CST 2011 beep 11Mon Jun 06 21:27:08 CST 2011 beep 12Mon Jun 06 21:27:08 CST 2011 beep 13Mon Jun 06 21:27:10 CST 2011 beep 14Mon Jun 06 21:27:12 CST 2011 beep 15Mon Jun 06 21:27:13 CST 2011 beep 16Mon Jun 06 21:27:14 CST 2011 beep 17Mon Jun 06 21:27:16 CST 2011 beep 18Mon Jun 06 21:27:18 CST 2011 beep 19Mon Jun 06 21:27:18 CST 2011 beep 20Mon Jun 06 21:27:20 CST 2011 beep 21


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

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

热点排行