定时 每天早上08:00执行

chan10 2009-12-29 12:54:04
想写个java程序
要求:
【定时 每天早上08:00执行】
本来想用Timer.schedule(new TimerTask(),Date XX,24*60*60*1000)来做,但是搞不定
一, Date XX不知道怎么做
二, 如果TimerTask类中,run()方法出问题,得保证下一天的08点,程序还是可以继续跑的起来
三, 数据清除 如果用List之类的集合来保存数据,是不是应该有清楚操作,不然过个几个月
程序得爆掉(不咋相信java的GC机制)

类似的还有一个
【定时 周期1小时】的进程。

望各位能给个提示 , 好久没做过线程了(把定时器理解为线程的一种,不知对不对), 别整个问题出来。
...全文
1157 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
chan10 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 daisycool 的回复:]
控制线程睡眠时间是最不好的办法。几乎任何语言的定时任务都应该用quartz来解决

String schedule = "00 08 * * *";

上面的String里的字节分别代表:分钟 小时 日期 月份 星期几

这样不但稳定,而且容易控制和修改。还有更复杂的设置,可以让计划任务精确到秒,lz可以搜索一下学习学习。



[/Quote]

你说的是用quartz来实现?
这个还真没有用过。
hbu_zhy 2010-01-04
  • 打赏
  • 举报
回复
xuexi
daisycool 2010-01-04
  • 打赏
  • 举报
回复
控制线程睡眠时间是最不好的办法。几乎任何语言的定时任务都应该用quartz来解决

String schedule = "00 08 * * *";

上面的String里的字节分别代表:分钟 小时 日期 月份 星期几

这样不但稳定,而且容易控制和修改。还有更复杂的设置,可以让计划任务精确到秒,lz可以搜索一下学习学习。


ZX_ARES 2010-01-04
  • 打赏
  • 举报
回复
不知道楼主就是想用JAVA实现呢?还是单纯想定时执行这个程序。

如果单纯想定时执行这个程序,那就写一个批处理文件,在里面用java命令调用这个程序,然后把这个批处理文件加到windows的计划任务里定时执行就行了吧......
牛叔 2010-01-04
  • 打赏
  • 举报
回复
mark
TzSword 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 chan10 的回复:]
引用 32 楼 daisycool 的回复:
控制线程睡眠时间是最不好的办法。几乎任何语言的定时任务都应该用quartz来解决

String schedule = "00 08 * * *";

上面的String里的字节分别代表:分钟 小时 日期 月份 星期几

这样不但稳定,而且容易控制和修改。还有更复杂的设置,可以让计划任务精确到秒,lz可以搜索一下学习学习。




你说的是用quartz来实现?
这个还真没有用过。
[/Quote]
对于Quartz框架来说。。。。
能用java能实现的定时时间的就不用Quartz
如果你需要复杂的时间定位。。
比如:我每年的某一个月的每个双日的每天早上8:00执行什么什么。。
那选择Quartz吧。。。它将给你带来方便。。

上面的话来自Quartz的帮助文档。。。
TzSword 2010-01-03
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 lixiaodao01 的回复:]
呃,直接去地摊上5块钱买个电子表,定在早上8点,然后起床开机,执行…… O(∩_∩)O~
[/Quote]
定个7:58的。。。。。
开机执行Java程序两分钟。。。嘿嘿
小栗色兔子 2010-01-02
  • 打赏
  • 举报
回复
mark........
zpx3243 2010-01-02
  • 打赏
  • 举报
回复
有以下方法:

1.用 Spring 的 timetask

2.直接用 Windows控制面板中的任务计划:
1)写个.bat 直接运行你的Java程序就行了,classpath有必要就配置一下。
2)任务计划指定到你的.bat就可以了。

3.做个JavaWrapper,安装后形式是 WindowsService.程序里面用 while sleep等做循环检测就可以了。
黑风不是大侠 2010-01-02
  • 打赏
  • 举报
回复
呃,直接去地摊上5块钱买个电子表,定在早上8点,然后起床开机,执行…… O(∩_∩)O~
ahhh90h 2010-01-02
  • 打赏
  • 举报
回复
gongyali2005 2010-01-02
  • 打赏
  • 举报
回复
最好在服务器配个定时任务。
b1412 2010-01-01
  • 打赏
  • 举报
回复
学习一下。。
junon 2010-01-01
  • 打赏
  • 举报
回复
期待
shuiguozheng 2010-01-01
  • 打赏
  • 举报
回复
用spring 吧!
在spring配置文件applicationContext.xml中加入

<!-- 定时执行 开始 -->
<bean id="methodInvokingJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="chargelogDao" />
</property>
<property name="targetMethod">
<value>dingshi</value>
</property>
</bean>
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="methodInvokingJobDetail" />
</property>
<property name="cronExpression">
<value>0 1 6,16,20 * * ?</value>
<!-- 0 0 10,14,16 * * ? 每天上午10点,下午2点,4点-->
</property>
</bean>
<bean
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="cronTrigger" />
</list>
</property>
</bean>
<!-- 定时执行 结束 -->

chargelogDao为定时执行的类,dingshi为定时执行的方法

时间设置说明:
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
按顺序依次为
1.秒(0~59)
2.分钟(0~59)
3.小时(0~23)
4.天(月)(0~31,但是你需要考虑你月的天数)
5.月(0~11)
6.天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
7.年份(1970-2099)

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。
由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ??? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点

有些子表达式能包含一些范围或列表
例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”

“*”字符代表所有可能的值
因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天

“/”字符用来指定数值的增量
例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟 ;
在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样

“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值
当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”


“L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写

但是它在两个子表达式里的含义是不同的。

在天(月)子表达式中,“L”表示一个月的最后一天 ,
在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT

如果在“L”前有具体的内容,它就具有其他的含义了

例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最后一个星期五

注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题

nicole3life 2010-01-01
  • 打赏
  • 举报
回复
这个问题很有用呢
mark一下~~!!!
谢谢
chan10 2010-01-01
  • 打赏
  • 举报
回复
谢谢13楼的回复~~~
不过代码确实够长的,看起来有点费劲……
chan10 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 foolishdault 的回复:]
最好还是系统级别的定时任务,java定时需要java一直都是启动状态。
[/Quote]
我也感觉用纯java代码来控制这个,是有点虚。
但你说的系统级别的定时任务,是指windows系统或者linux系统,这种级别的?
能不能说明下呢?
chan10 2009-12-30
  • 打赏
  • 举报
回复
我也怀疑sleep用起来不保险。
Sunny_kaka 2009-12-30
  • 打赏
  • 举报
回复
楼上的头像很好很强大
加载更多回复(15)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧