Timer和ScheduledExecutorService都可以用来做定时任务,有管理任务延迟执行("如1000ms后执行任务")以及周期性执行("如每500ms执行一次该任务")。但至从JDK1.5之后,建议采用ScheduledExecutorService。
原因如下:
1、Timer对调度的支持是基于绝对时间,而不是相对时间的,由此任务对系统时钟的改变是敏感的;但ScheduledThreadExecutor只支持相对时间。
2、如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为。Timer线程并不捕获异常,所以 TimerTask抛出的未检查的异常会终止timer线程。此时,已经被安排但尚未执行的TimerTask永远不会再执行了,新的任务也不能被调度了。
3、Timer里面的任务如果执行时间太长,会独占Timer对象,使得后面的任务无法几时的执行 ,ScheduledExecutorService不会出现Timer的问题(除非你只搞一个单线程池的任务区)
Timer:
- public class TimerTest {
- private static final Timer timer1 = new Timer(true);
- public static void main(String[] args) {
- timer1.schedule(new TimerTask(){
- @Override
- public void run() {
- System.out.println("执行定时任务...");
- }
- }, 0, 60000*1);
- }
- }
ScheduledExecutorService:
- public class ScheduleExecutor {
- private final ScheduledExecutorService scheduler =
- Executors.newScheduledThreadPool(1);
- public void beepForMin() {
- final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(
- new Runnable() {
- public void run() {
- System.out.println("执行。。。");
- }
- }, 0, 10, SECONDS);
- scheduler.schedule(new Runnable() {
- public void run() {
- beeperHandle.cancel(true);
- System.exit(0);
- }
- }, 30, SECONDS);
- }
- public static void main(String[] args) {
- ScheduleExecutor se = new ScheduleExecutor();
- se.beepForMin();
- }
- }
相关推荐
【Timer定时器的使用方法】 在Java编程语言中,`java.util.Timer` 和 `java.util.TimerTask` 类是用于执行定期或延时任务的核心组件。它们允许开发者在指定的时间间隔内执行特定的操作,这对于实现定时任务,如定时...
在Android应用开发中,合理使用`Timer`能够帮助我们实现很多实用的功能,但同时也要注意其潜在的问题,如线程安全和性能影响。在设计系统时,应根据具体需求选择最适合的定时器实现,以确保应用的稳定性和效率。
* Timer的使用和缺陷 * TimerTask的实现和使用 *ScheduledExecutorService接口的使用 * 并发编程中的线程管理和异常处理机制 在实际开发中,需要根据具体情况选择合适的技术来实现并发编程,例如使用Timer、...
在本文中,我们将深入探讨`Timer`类的工作原理、常用方法以及如何使用它来创建和管理定时任务。 `Timer`类主要用于计划在将来某个时间点执行的任务,这通常通过`TimerTask`类来实现,`TimerTask`是实现了`Runnable`...
在压缩包中的`test08`文件可能是实现上述示例的源代码文件,通过查看这个文件,你可以更深入地理解`Timer`和`TimerTask`的使用。建议打开并分析这个文件,观察如何将理论知识应用于实际项目。 总之,这个简单的...
在Java编程语言中,`TimerTask`和`Timer`是两个关键类,它们用于实现定时任务和调度。这两个类在处理需要定期执行的任务时非常有用,例如数据刷新、任务调度或者周期性的系统检查等。本篇文章将深入探讨`TimerTask`...
虽然在Android中,我们更倾向于使用`Handler`、`ScheduledExecutorService`或`AlarmManager`来实现定时任务,但了解`Timer`的使用也是有必要的,尤其是对于那些熟悉Java基础的开发者。 `Timer`类的主要方法包括: 1...
在描述中提到的是一个使用图形用户界面(GUI)实现的Timer应用,允许用户设置特定的时间段,并且能够控制Timer的启动和关闭。用户还可以通过任意按键完成操作,这可能涉及到键盘监听事件的处理。 下面我们将深入...
1. Java:Java提供java.util.Timer和java.util.concurrent.Timer类,以及ScheduledExecutorService接口来实现定时任务。 2. Python:Python的time模块提供了简单的计时功能,而threading模块则提供了更复杂的定时器...
在上面的示例代码中,我们使用了 Executors.newSingleThreadScheduledExecutor() 方法来创建一个 ScheduledExecutorService 实例。这个方法创建了一个单线程的cheduledExecutorService,用于执行定时任务。 ...
`TimerTask`是与`Timer`配合使用的接口,需要我们实现该接口以定义要执行的任务。 1. **创建Timer对象**: 首先,我们需要创建一个`Timer`对象。这可以通过调用`Timer`的无参构造函数来完成。例如: ```java ...
在提供的压缩包文件"task"中,可能包含了一个或多个示例代码,这些代码展示了如何使用`Timer`和`TimerTask`来创建和管理任务池。通过分析这些代码,你可以更深入地理解这两个类的实际应用,并学习如何根据需求调整和...
在本文中,我们将深入探讨`Timer`类的基本使用和示例,帮助你理解如何在Java程序中实现简单的定时任务。 首先,`Timer`类提供了计划任务的能力,它可以按照预定的时间间隔安排任务执行。创建一个`Timer`对象后,你...
在多线程环境下,推荐使用`java.util.concurrent.ScheduledExecutorService`,它提供了更高级的线程管理和调度功能,比如支持并发控制、延迟执行和精确的定时任务。 在实际应用中,定时任务常用于数据库备份、数据...
总的来说,`Timer`和`TimerTask`是Java中实现简单定时任务的便利工具,但在高并发、高性能的场景下,可能需要考虑使用更强大的调度库,如`Quartz`或`Spring Framework`中的`ScheduledExecutorService`。
在实际开发中,根据项目需求和性能要求,可以考虑使用更高级的并发工具,如 `ScheduledExecutorService`,以获得更好的控制和性能。同时,理解和熟练掌握这些基础工具对于理解并发编程和任务调度至关重要。
以下是一个简单的`Timer`和`TimerTask`使用示例: ```java import java.util.Timer; import java.util.TimerTask; public class TimerDemo { public static void main(String[] args) { Timer timer = new Timer...
这个类是Java早期版本中对定时任务管理的一个重要实现,尽管在Java 5之后,`java.util.concurrent`包中的`ScheduledExecutorService`被推荐使用,但`Timer`仍然在很多场景下被广泛采用。 `Timer`类主要有两个核心...
如精度不够高,且当`Timer`关联的线程被中断或抛出未捕获异常时,整个`Timer`会被取消,因此在Java 5及更高版本中,通常推荐使用`ScheduledExecutorService`替代`Timer`,它可以提供更灵活和可控的定时任务管理。...
Java中的定时器(Timer)是Java.util包下用于执行定期任务的一个类,它与线程(Thread)紧密关联,能够帮助开发者实现定时执行特定任务的需求。这个机制在多线程编程(multithreading)中非常有用,特别是在需要定期...