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的。
分享到:
相关推荐
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1)
主要介绍了java.util.concurrent.ExecutionException 问题解决方法的相关资料,需要的朋友可以参考下
java并发工具包 java.util.concurrent中文版-带书签版
java.util.concurrent总体概览图。 收取资源分3分。需要的同学可以下载一下。 java.util.concurrent主要包括5个部分executor,colletions,locks,atomic,tools。 该图详细的列举了并发包下面的结构,包含所有接口和...
java并发工具包 java.util.concurrent中文版pdf
java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
java.util.ConcurrentModificationException 异常问题详解1
Exception in thread “main“ java.util.InputMismatchException
Java并发编程工具包java.util.concurrent的UML类结构图 PDF
JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用
如何启动:以win7系统为例,最好jdk8 1.打开cmd,cd到jdk的path,本机是:cd C:\Java\jdk6\bin ...java -cp D:\javaConcurrentAnimated.jar vgrazi.concurrent.samples.launcher.ConcurrentExampleLauncher
java.util.concurrent系列文章(2) java.util.concurrent系列文章(2) java.util.concurrent系列文章(2) java.util.concurrent系列文章(2)
本文通过对数据压缩算法的简要介绍,然后以详细的示例演示了利用java.util.zip包实现数据的压缩与解压,并扩展到在网络传输方面如何应用java.util.zip包现数据压缩与解压
花了一段时间辛苦整理的ppt,与大家分享,请提出您的宝贵意见。
详细介绍了java.util.logging.Logger的用法和结构,对如果扩展Logger起到抛砖引玉的作用!尊重劳动成果,亲下载了要给个评价!
Doug Lea关于jdk里面并发同步器的实现。
AQS作者Doug lea关于AQS设计、性能的paper,需要了解AQS的设计思想,思路可以参考这篇paper