需要注意的是线程池必须使用shutdown来显式关闭否则主线程就无法退出shutdown也不会阻塞主线程
许多长时间运行的应用有时候需要定时运行任务完成一些诸如统计优化等工作比如在电信行业中处理用户话单时需要每隔分钟处理话单网站每天凌晨统计用户访问量用户数大型超时凌晨点统计当天销售额以及最热卖的商品每周日进行数据库备份公司每个月的号计算工资并进行转帐等这些都是定时任务通过 java的并发库concurrent可以轻松的完成这些任务而且非常的简单
packageconcurrent;
importstaticjavautilconcurrentTimeUnitSECONDS;
importjavautilDate;
importjavautilconcurrentExecutors;
importjavautilconcurrentScheduledExecutorService;
importjavautilconcurrentScheduledFuture;
publicclassTestScheduledThread{
publicstaticvoidmain(String[]args){
finalScheduledExecutorServicescheduler=Executors
newScheduledThreadPool();
finalRunnablebeeper=newRunnable(){
intcount=;
publicvoidrun(){
Systemoutprintln(newDate()+beep+(++count));
}
};
//秒钟后运行并每隔秒运行一次
finalScheduledFuture<?>beeperHandle=schedulerscheduleAtFixedRate(
beeperSECONDS);
//秒钟后运行并每次在上次任务运行完后等待秒后重新运行
finalScheduledFuture<?>beeperHandle=scheduler
scheduleWithFixedDelay(beeperSECONDS);
//秒后结束关闭任务并且关闭Scheduler
schedulerschedule(newRunnable(){
publicvoidrun(){
beeperHandlecancel(true);
beeperHandlecancel(true);
schedulershutdown();
}
}SECONDS);
}
}
为了退出进程上面的代码中加入了关闭Scheduler的操作而对于小时运行的应用而言是没有必要关闭Scheduler的
[] []