Java有没有这样周期行的定时器?

code-artist 2008-09-18 02:27:40
功能:每隔固定时间执行一次。如果达到一定条件,通知定时器马上运行。下次等候固定时间在执行

Timer不行,JDK5后推荐ScheduleThreadPool替代Timer,貌似也不行。
大家有个这样的需求吗?该如何解决?
感激涕零
...全文
292 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZF59894570 2008-09-30
  • 打赏
  • 举报
回复
quartz
lixiaoxue85 2008-09-26
  • 打赏
  • 举报
回复
QUARTZ
guestdaocao 2008-09-25
  • 打赏
  • 举报
回复
1、Timer只创建唯一的线程执行所有的任务,如果一个timer任务的执行很耗时,会导致其他的timerTask的时效准确性出问题。...
这个是自己设计的问题了,谁让你用唯一线程执行的呢?多线程不就可以了么?executor pool不就是多线程么?时效准确性java本身是提供不了太多的,貌似1.5之后有了个System.nanotime可以提高时间的准确性,不然,就只能精确到1毫秒。

2、Timer的另外一个问题是:如果TimerTask抛出为检查异常,timer将会产生无法预料的行为。导致"线程泄露"
这个,,是问题么?没看懂。。。任什么executor pool里面装的都是线程,抛出异常,不是也会出问题么?另外,你抛出的是runtimeexception不是检查异常,是非检查异常。
loaferwang 2008-09-23
  • 打赏
  • 举报
回复
相信,线程可以搞定呀!
Alex_hello 2008-09-23
  • 打赏
  • 举报
回复
推荐LZ可以试试这个 Quartz

code-artist 2008-09-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 guestdaocao 的回复:]
引用 8 楼 WhatX 的回复:
我知道了,不使用重复执行,自己用间隔执行定义重复执行。
还有,建议大家不用使用Timer,TimerTask了,bug太多,不稳定。
用ScheduleExecutorTheadPool

我喷血,,谁说Timer、TimerTask bug太多了。。。你可以说java本身的Timer只实现了基本的功能,不要说这东西有bug,两个意义不同哦。。。
简单的java本身的Timer完全够用了,稍微复杂些的用quartz吧,基本问题都可以搞定了。如果自己有特殊需求…
[/Quote]

Timer只创建唯一的线程执行所有的任务,如果一个timer任务的执行很耗时,会导致其他的timerTask的时效准确性出问题。...
Timer的另外一个问题是:如果TimerTask抛出为检查异常,timer将会产生无法预料的行为。导致"线程泄露"

public class BadTimerTest{
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new RuntimeExcepTask(), 1);
Thread.sleep(1000);
timer.schedule(new new RuntimeExcepTask(), 1);
Thread.sleep(1000);
}

static class RuntimeExcepTask extends TimerTask {
publi void run {throw new RuntimeException(); }
}
}


因此我还是推荐不要使用timer,timertask。ScheduleThreadPoolExecutor作为代替品
rypgood 2008-09-20
  • 打赏
  • 举报
回复
自己用多线程写吧
guestdaocao 2008-09-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 WhatX 的回复:]
我知道了,不使用重复执行,自己用间隔执行定义重复执行。
还有,建议大家不用使用Timer,TimerTask了,bug太多,不稳定。
用ScheduleExecutorTheadPool
[/Quote]
我喷血,,谁说Timer、TimerTask bug太多了。。。你可以说java本身的Timer只实现了基本的功能,不要说这东西有bug,两个意义不同哦。。。
简单的java本身的Timer完全够用了,稍微复杂些的用quartz吧,基本问题都可以搞定了。如果自己有特殊需求的就自己写了。定时器不就是一个线程一直执行,等到任务来了,启动一个线程执行这个任务就是了么。原理搞懂了,用什么都一样。
liky5387 2008-09-19
  • 打赏
  • 举报
回复
先不说Timer,TimerTask的Bug多与少,但楼主想要实现的问题,绝对可以完成.要是这点儿功能都实现不了.java可以下课了.

tilmer.scheduleAtFixedRate(TimerTask task, long delay, long period);
这是完全可以完成的.

本人在做项目的时候,非同期的batch系的EJB,有上千个,都是用它来启动的.

code-artist 2008-09-19
  • 打赏
  • 举报
回复
我知道了,不使用重复执行,自己用间隔执行定义重复执行。
还有,建议大家不用使用Timer,TimerTask了,bug太多,不稳定。
用ScheduleExecutorTheadPool
stonegump 2008-09-19
  • 打赏
  • 举报
回复
Timer不能直接满足,加上你的控制代码就行了啊。
比如你要做的那个任务是个线程,放在TimerTask里定时执行。
达到一定条件的时候,自己把那个线程起来
liltos 2008-09-19
  • 打赏
  • 举报
回复
opensymphony quartz
http://www.opensymphony.com/quartz/
qiuqiupeng 2008-09-19
  • 打赏
  • 举报
回复
Timer和TimerTask
具体用法参考api
code-artist 2008-09-18
  • 打赏
  • 举报
回复
定一下
code-artist 2008-09-18
  • 打赏
  • 举报
回复
通常情况下,每隔固定时间执行一次;如果达到一定条件,通知定时器马上运行。下次等候固定时间在执行

Timer如何能满足?
xuhaiyang 2008-09-18
  • 打赏
  • 举报
回复
timertask
临远 2008-09-18
  • 打赏
  • 举报
回复
Timer和TimerTask

62,614

社区成员

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

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