ScheduledExecutorService定时周期执行指定的任务
来源:互联网 发布:知可之伯母邪恶漫画 编辑:程序博客网 时间:2024/05/18 00:27
自己打败自己是最可悲的失败,自己战胜自己是最可贵的胜利。
本讲内容:ScheduledExecutorService定时周期执行指定的任务
一、由于Timer管理延时任务存在缺陷,因为Timer在执行定时任务时只会创建一个线程,所以如果存在多个任务,且任务时间过长,超过了两个任务的间隔时间,会发生一些缺陷:
http://blog.csdn.net/lmj623565791/article/details/27109467
二、ScheduledExecutorService 概述
ScheduleExecutorService接口中有四个重要的方法
scheduleAtFixedRate参数说明:
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit);
command:执行线程
initialDelay:初始化延时
period:两次开始执行最小间隔时间
unit:计时单位
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit);
command:执行线程
initialDelay:初始化延时
period:前一次执行结束到下一次执行开始的间隔时间(间隔执行延迟时间)
unit:计时单位
示例一:按指定频率周期执行某个任务(初始化延迟0ms开始执行,每隔100ms重新执行一次任务。)
/** * 以固定周期频率执行任务 */ public static void executeFixedRate() { ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); executor.scheduleAtFixedRate( new EchoServer(), //执行这个任务 0, 100, TimeUnit.MILLISECONDS); }
示例二:按指定频率间隔执行某个任务(初始化时延时0ms开始执行,本次执行结束后延迟100ms开始下次执行。)
/** * 以固定延迟时间进行执行 * 本次任务执行完成后,需要延迟设定的延迟时间,才会执行新的任务 */ public static void executeFixedDelay() { ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); executor.scheduleWithFixedDelay( new EchoServer(), 0, 100, TimeUnit.MILLISECONDS); }
示例三:周期定时执行某个任务。
有时候我们希望一个任务被安排在凌晨3点(访问较少时)周期性的执行一个比较耗费资源的任务,可以使用下面方法设定每天在固定时间执行一次任务。
/** * 每天晚上8点执行一次 * 每天定时安排任务进行执行 */ public static void executeEightAtNightPerDay() { ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); long oneDay = 24 * 60 * 60 * 1000; long initDelay = getTimeMillis("20:00:00") - System.currentTimeMillis(); initDelay = initDelay > 0 ? initDelay : oneDay + initDelay; executor.scheduleAtFixedRate( new EchoServer(), initDelay, oneDay, TimeUnit.MILLISECONDS); }
/** * 获取指定时间对应的毫秒数 * @param time "HH:mm:ss" * @return */ private static long getTimeMillis(String time) { try { DateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); DateFormat dayFormat = new SimpleDateFormat("yy-MM-dd"); Date curDate = dateFormat.parse(dayFormat.format(new Date()) + " " + time); return curDate.getTime(); } catch (ParseException e) { e.printStackTrace(); } return 0; }
4.上面示例辅助代码
class EchoServer implements Runnable { @Override public void run() { try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("This is a echo server. The current time is " + System.currentTimeMillis() + "."); } }
http://blog.csdn.net/liguojin1230/article/details/50158769 用到执行定时任务
http://blog.csdn.net/tsyj810883979/article/details/8481621 参考文章
Take your time and enjoy it
0 0
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService 定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService定时周期执行指定的任务
- 五大常用算法之二:动态规划算法
- 对【委托的执行方法】的测试与理解
- CodeForces - 27E Number With The Given Amount Of Divisors (反素数入门)
- ubuntu下Qt cannot find -lGL错误的解决方法
- java中的格式输出
- ScheduledExecutorService定时周期执行指定的任务
- kafka+zookeeper环境配置(Mac 或者 linux环境)
- 【算法训练】八皇后问题回溯算法求解
- sql 根据经纬度求距离
- Android startActivityForResult(intent, requestCode)的用法。
- C、c++ .h 头文件的作用
- 01背包 的简述
- The C++ Standard Library: shared_ptr and unique_ptr
- Linux学习笔记(四、目录处理命令)