`

java Timer 调用两次 原因 解决方法

阅读更多
IDE:Eclipse
Server:GlassFish
用到Timer,任务是每10S进行一项任务。
有个servlet在服务器启动时被加载,并且在init里开始定时器任务
遇到的问题,有时候10S执行一次,但是有时候10S执行两次,而且这两次是相互隔离的,互补干扰,并且各任务之间间隔也是10S。感觉像是一个定时器被隔离调用了2次。

查了很多资料,都没有解决问题,最后自己琢磨发现:
原来是启动服务器的时候这个定时器启动,这时候一直就是正确的,都是10S只有一个定时器被调用。
后来修改了一些代码,在Eclipse里热部署了,再次启动定时器任务的时候,发现原来的定时器还在,结果出现上述问题。

总结:每次都要重启服务器就可以避免这个问题。

PS:调用两次的原因可能有很多种,希望大家对症下药。
PS:关于Eclipse的热部署,可以到我的博客下找到对应的文章
地址:GlassFish安装下载和Eclipse热部署
分享到:
评论

相关推荐

    Timer-java.rar_java timer_timer_timer java

    `Timer`类主要通过两个方法来调度任务:`schedule(TimerTask task, long delay)`和`schedule(TimerTask task, Date firstTime, long period)`。前者用于在指定延迟后执行一次任务,后者则在首次指定时间后,每隔...

    java定时器(timer类使用详解)

    - **周期性任务**:使用`schedule(TimerTask task, long initialDelay, long period)`方法,`initialDelay`表示首次执行的延迟时间,`period`表示两次执行之间的间隔时间。 ```java timer.schedule(task, 1000, ...

    JavaTimer和TimerTask实例教程Java开发

    在Java编程语言中,`Timer`和`TimerTask`是两个重要的类,它们用于调度周期性的任务执行。这两个类属于`java.util`包,提供了在后台线程中延迟执行任务或者定期执行任务的能力,这对于创建定时任务或者实现定时器...

    Java--Timer--TimerTask--.rar_java timer

    在Java编程语言中,`Timer`和`TimerTask`是两个关键类,它们用于调度周期性的任务执行。这两个类在多线程环境下尤其有用,能够帮助开发者安排在将来某一特定时间或定期执行的任务。让我们深入了解一下`Timer`和`...

    小码农的代码(四)----------JAVA中Timer定时器与Spring定时任务

    在Java编程语言中,`Timer`类和Spring框架的定时任务是两种常见的实现定时执行任务的方式。本篇文章将深入探讨这两个主题,旨在帮助初学者理解它们的工作原理以及如何在实际项目中应用。 首先,让我们来看一下Java...

    java Timer测试定时调用及固定时间执行代码示例

    在下面,我们将提供两个测试示例,演示如何使用 Java Timer 实现定时调用及固定时间执行代码。 测试 1:当任务执行时间小于重复执行的间隔时间 在这个示例中,我们将创建一个 Timer 对象,并使用 schedule 方法来...

    Timer定时器的使用方法

    后者则保证两次执行之间的间隔固定,即使上一次执行超时也不会影响下一次的执行时间。 ```java // 延迟5秒后首次执行,然后每隔3秒执行一次 timer.schedule(new MyTask(), 5000, 3000); ``` 二、`TimerTask` 的...

    sample-Timer.rar_Timer ja_mftimer_timer java

    当不再需要定时任务时,可以调用`TimerTask`的`cancel`方法来取消任务,或者调用`Timer`的`cancel`方法来停止整个`Timer`。这可以防止内存泄漏。例如: ```java task.cancel(); // 取消单个任务 timer.cancel();...

    java定时器Timer

    Java Timer类有两个构造函数: - `Timer()`:创建一个新的定时器,任务将在调用线程的上下文中执行。 - `Timer(boolean isDaemon)`:创建一个新的定时器,如果`isDaemon`参数为true,那么创建的线程将是一个守护线程...

    Java计时器Timer 使用.doc

    如果需要取消已经安排的任务,可以调用 `Timer` 的 `cancel()` 方法。这将停止 `Timer` 并取消所有未执行的任务。例如: ```java timer.cancel(); ``` 不过,要注意的是,一旦 `Timer` 被取消,它就不能再被使用来...

    java Timer定时器实例 Spring实例.doc

    `Timer` 类提供了两种计划任务的方法:`schedule(TimerTask task, long delay)` 和 `scheduleAtFixedRate(TimerTask task, long delay, long period)`。前者会在指定的延迟后执行一次任务,而后者则会按照固定的延迟...

    JAVA定时器之Timer+TimerTask

    要使用`Timer`和`TimerTask`实现单次定时执行,可以调用`Timer`的`schedule(TimerTask task, long delay)`方法,其中`delay`参数表示延迟执行的时间(以毫秒为单位)。 示例: ```java TimerTask task = new MyTask...

    java_Timer定时器实例_Spring实例

    Java的`java.util.Timer`类用于调度线程在特定时间执行任务,它提供了两种任务执行方式:`schedule()`和`scheduleAtFixedRate()`。前者用于定期执行任务,但每次执行之间的时间间隔可能因任务执行时间而有所不同;后...

    Java定时器Timer简述共8页.pdf.zip

    Java定时器(Timer)是Java语言中用于调度任务的一个重要工具,它允许程序在特定时间间隔执行预定的任务,或者在指定的时间点执行一次性任务。这个功能对于构建具有定时任务需求的应用程序,如定期数据同步、后台...

    timer写的任务池

    在Java编程语言中,`Timer`和`TimerTask`是两个关键类,它们构成了一个简单但功能强大的任务调度系统,可以用于执行周期性或者延迟的任务。`Timer`类是一个线程,它负责调度和执行`TimerTask`实例。`TimerTask`则是...

    Java定时执行某个任务

    这里我们将深入探讨两种主要的方法:Java的`java.util.Timer`类和Java 5及以上版本引入的`java.util.concurrent.ScheduledExecutorService`接口。 首先,我们来了解`java.util.Timer`类。这个类允许开发者创建一个...

    java中Timer定时器的使用

    4. 如果不再需要定时器,记得调用`Timer`的`cancel()`方法来取消所有任务并释放资源,否则`Timer`线程会一直运行,即使所有任务都已经完成。 通过阅读`Timer`和`TimerTask`的源码,我们可以了解到其实`Timer`内部...

    java定时器timer的使用方法代码示例

    创建一个Timer对象表示启动了一个定时线程,然后通过调用`schedule(TimerTask task, long delay)`或`schedule(TimerTask task, Date firstTime, long period)`方法来安排任务的执行。`TimerTask`是需要执行的任务,...

    java类Timer和TimerTask的使用.pdf

    这个方法和`schedule`类似,但不同之处在于它会尽力确保任务按照固定的频率执行,即使前一次执行因为各种原因(如系统延迟)超过了预定的时间间隔,`scheduleAtFixedRate`也会尝试调整后续任务的执行时间以补偿之前...

    几种定时任务(Timer、TimerTask、ScheduledFuture)的退出—结合真实案例【JAVA并发】.docx

    当需要退出时,除了在TimerTask的run()方法中调用cancel()外,还可以直接调用Timer的cancel()方法,这将取消所有计划的TimerTask并停止Timer线程。 接下来,我们转向ScheduledExecutorService,它是Java并发框架中...

Global site tag (gtag.js) - Google Analytics