Java有没有这样周期行的定时器? 功能:每隔固定时间执行一次。如果达到一定条件,通知定时器马上运行。下次等候固定时间在执行Timer不行,JDK5后推荐ScheduleThreadPool替代Timer,貌似也不行。大家有个这样的需求吗?该如何解决?感激涕零 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通常情况下,每隔固定时间执行一次;如果达到一定条件,通知定时器马上运行。下次等候固定时间在执行Timer如何能满足? Timer和TimerTask具体用法参考api opensymphony quartzhttp://www.opensymphony.com/quartz/ Timer不能直接满足,加上你的控制代码就行了啊。比如你要做的那个任务是个线程,放在TimerTask里定时执行。达到一定条件的时候,自己把那个线程起来 我知道了,不使用重复执行,自己用间隔执行定义重复执行。还有,建议大家不用使用Timer,TimerTask了,bug太多,不稳定。用ScheduleExecutorTheadPool 先不说Timer,TimerTask的Bug多与少,但楼主想要实现的问题,绝对可以完成.要是这点儿功能都实现不了.java可以下课了.tilmer.scheduleAtFixedRate(TimerTask task, long delay, long period);这是完全可以完成的.本人在做项目的时候,非同期的batch系的EJB,有上千个,都是用它来启动的. 我喷血,,谁说Timer、TimerTask bug太多了你可以说java本身的Timer只实现了基本的功能,不要说这东西有bug,两个意义不同哦简单的java本身的Timer完全够用了,稍微复杂些的用quartz吧,基本问题都可以搞定了。如果自己有特殊需求的就自己写了。定时器不就是一个线程一直执行,等到任务来了,启动一个线程执行这个任务就是了么。原理搞懂了,用什么都一样。 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作为代替品 推荐LZ可以试试这个 Quartz 1、Timer只创建唯一的线程执行所有的任务,如果一个timer任务的执行很耗时,会导致其他的timerTask的时效准确性出问题。... 这个是自己设计的问题了,谁让你用唯一线程执行的呢?多线程不就可以了么?executor pool不就是多线程么?时效准确性java本身是提供不了太多的,貌似1.5之后有了个System.nanotime可以提高时间的准确性,不然,就只能精确到1毫秒。2、Timer的另外一个问题是:如果TimerTask抛出为检查异常,timer将会产生无法预料的行为。导致"线程泄露" 这个,,是问题么?没看懂任什么executor pool里面装的都是线程,抛出异常,不是也会出问题么?另外,你抛出的是runtimeexception不是检查异常,是非检查异常。 我的jar文件在自己的电脑双击不能运行,可是在别人的电脑可以运行。 最大公约数和最大公约数问题 GUI求急!!! 怎样将JAVA生成EXE的程序 在线等,Struts中的问题 java能做语音聊天室么. 怎么样实现在JTree上的MouseListener? 关于awt包中的Canvas类? 求助!在Jbuider里如何将各类控件放至指定的位置? 出现一个小问题:( [求助]当使用高级流封装了低级流,低级流自动关闭吗? 打包好的jar文件没法执行
具体用法参考api
http://www.opensymphony.com/quartz/
比如你要做的那个任务是个线程,放在TimerTask里定时执行。
达到一定条件的时候,自己把那个线程起来
还有,建议大家不用使用Timer,TimerTask了,bug太多,不稳定。
用ScheduleExecutorTheadPool
这是完全可以完成的.本人在做项目的时候,非同期的batch系的EJB,有上千个,都是用它来启动的.
简单的java本身的Timer完全够用了,稍微复杂些的用quartz吧,基本问题都可以搞定了。如果自己有特殊需求的就自己写了。定时器不就是一个线程一直执行,等到任务来了,启动一个线程执行这个任务就是了么。原理搞懂了,用什么都一样。
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作为代替品
这个是自己设计的问题了,谁让你用唯一线程执行的呢?多线程不就可以了么?executor pool不就是多线程么?时效准确性java本身是提供不了太多的,貌似1.5之后有了个System.nanotime可以提高时间的准确性,不然,就只能精确到1毫秒。2、Timer的另外一个问题是:如果TimerTask抛出为检查异常,timer将会产生无法预料的行为。导致"线程泄露"
这个,,是问题么?没看懂任什么executor pool里面装的都是线程,抛出异常,不是也会出问题么?另外,你抛出的是runtimeexception不是检查异常,是非检查异常。