`

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`也会尝试调整后续任务的执行时间以补偿之前...

    Java中的Timer和TimerTask的使用.doc

    在Java编程语言中,`Timer`和`TimerTask`是两个关键的类,它们用于创建和管理定时任务。`Timer`类提供了一种机制来安排在未来某一特定时间或以固定间隔执行任务,而`TimerTask`是这些任务的实现基础。 `Timer`类是...

Global site tag (gtag.js) - Google Analytics