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