Java Timer, TimerTask, Timer.Schedule
schedule的意思(时间表、进度表)
timer.schedule(new TimerTask(){ void run()},0, 60*60*1000);
timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000);
第一个参数"new MyTask(event.getServletContext())":
是 TimerTask 类,在包:import java.util.TimerTask .使用者要继承该类,并实现 public void run() 方法,因为 TimerTask 类实现了 Runnable 接口。
第二个参数"0"的意思是:(0就表示无延迟)
当你调用该方法后,该方法必然会调用 TimerTask 类 TimerTask 类 中的 run() 方法,这个参数就是这两者之间时间的差值,也就是说,用户调用 schedule() 方法后,要等待这么长的时间才可以第一次执行 run() 方法。
第三个参数"60*60*1000"的意思就是:
(单位是毫秒60*60*1000为一小时)
(单位是毫秒3*60*1000为三分钟)
第一次调用之后,从第二次开始每隔多长的时间调用一次 run() 方法。
https://www.cnblogs.com/lcngu/p/5010377.html
补充:
用同一个Timer schedule 多个task有问题吗?
Java的一个Timer对象本身只有一个线程,如果向他提交多个task,并且某个task相当耗时的话,其他的task即使到了执行时间,仍然会等之前的task执行完毕。更有问题,如果前一个task抛出了异常导致线程终止,后面的task将无法执行。
Java5以后推荐采用java.util.concurrent的ScheduledExecutorService,至少能避免异常导致线程结束的问题。
如果对时间有比较准确的需要,务必一个ScheduledExecutorService处理一个任务。
另外一说,每天定时执行的任务,用Windows的任务计划,Linux的crond执行一个Java的Application就可以实现,何必用Java的定时器让进程常驻,运行的越久。
相关文章
- JAVA贪吃蛇小游戏源代码系列
- java 把对象转成map_Java对象转换成Map[通俗易懂]
- java线程池的面试题_献给准备面试的你,Java线程and线程池面试题小结「建议收藏」
- java怎么输出保留两位小数_剖析Java输出怎么保留两位小数「建议收藏」
- Java基础知识总结(超详细整理),java从入门到精通pdf「建议收藏」
- java编程软件下载_Ee Java(Java编程软件) V1.1.0 官方版
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java redis锁_Java中Redis锁的实现[通俗易懂]
- 【说站】java线程的三种结束方式
- java定时任务schedule_timer schedule参数
- 【测开技能】Java语言系列(十四)for循环
- 图形界面JAVA_aardio plus
- Java字符串转集合_java集合转数组
- Java生成随机密码详解编程语言
- Java学习笔记之三java中的变量和常量详解编程语言
- 一文让你彻底理解 Java HashMap 和 ConcurrentHashMap详解编程语言
- java 时间戳与日期字符串相互转换详解编程语言
- 解决Java程序连接MySQL数据库的方法(java链接mysql数据库)
- 时间处理处理Java中Redis的过期时间的技巧(redisjava过期)
- 数据库的操作Java与MySQL搭配:完美数据库操作(java对mysql)
- Linux系统中下载Java的方法(linux下java下载)
- 深入探索Redis在Java中的应用——Redis Java手册全解析(redisjava手册)
- Java锁表与Oracle数据库协调实现数据安全(java锁表oracle)
- java二维数组矩阵乘法的实现方法
- java字符串拼接与性能分析详解