`
bugyun
  • 浏览: 559015 次
社区版块
存档分类
最新评论

Java 中定时器 timer 的使用

    博客分类:
  • Java
 
阅读更多
package com.bugyun.timer;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerTest {
	private final static TimerTask timerTask = new MyTimerTask();

	public static void main(String[] args) {
//		timer1();
//		timer2();
//		timer3();
//		timer4();
	}

	// 第一种方法:设定指定任务task,在2秒后执行  
	public static void timer1() {
		Timer timer = new Timer();
		timer.schedule(timerTask, 2000);
	}

	// 第二种方法:设定指定任务task,在1秒后,每隔5秒执行一次
	public static void timer2() {
		Timer timer = new Timer();
		timer.schedule(timerTask, 1000, 5000);
	}

	// 第三种方法:设定指定任务task,在1秒后,第二天同一时间执行
	public static void timer3() {
		Timer timer = new Timer();
		timer.scheduleAtFixedRate(timerTask, 1000, 1000 * 60 * 60 * 24);
	}

	// 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行.
	public static void timer4() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时
		calendar.set(Calendar.MINUTE, 0); // 控制分
		calendar.set(Calendar.SECOND, 0); // 控制秒

		Date date = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
		Timer timer = new Timer();
		timer.scheduleAtFixedRate(timerTask, date, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行
	}

}

class MyTimerTask extends TimerTask {

	@Override
	public void run() {
		System.out.println("当前执行时间是:"+now());
	}

	/**
	 * @description: 获得当前时间
	 * @return String   
	 * @throws
	 * @author beyond
	 * @data:2016年12月16日上午10:17:16
	 */
	public String now(){
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = new Date();
		String time = simpleDateFormat.format(date);
		return time;
	}
}

 

一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。

与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述不友好的任务最终完成时才能够被快速连续地执行。

对 Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。默认情况下,任务执行线程并不作为守护线程 来运行,所以它能够阻止应用程序终止。如果调用者想要快速终止计时器的任务执行线程,那么调用者应该调用计时器的 cancel 方法。

如果意外终止了计时器的任务执行线程,例如调用了它的 stop 方法,那么所有以后对该计时器安排任务的尝试都将导致 IllegalStateException,就好像调用了计时器的 cancel 方法一样。

此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。

此类 提供实时保证:它使用 Object.wait(long) 方法来安排任务。

实现注意事项:此类可扩展到大量同时安排的任务(存在数千个都没有问题)。在内部,它使用二进制堆来表示其任务队列,所以安排任务的开销是 O(log n),其中 n 是同时安排的任务数。

实现注意事项:所有构造方法都启动计时器线程。

 

schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次。

 

scheduleAtFixedRate()方法更注重保持执行频率的稳定:保障多次调用的频率趋近于period时间,如果某一次调用时间大于period,下一次就会尽量小于period,以保障频率接近于period。

分享到:
评论

相关推荐

    java 定时器(Timer)

    Java定时器(Timer)是Java Swing库中的一个类,它提供了调度任务在未来某个时间执行的能力。这个类主要用于在GUI应用程序中实现定时触发某些操作,比如更新界面、执行动画或者执行周期性的后台任务。Timer类结合了...

    JAVA中定时器的使用

    JAVA 中提供了多种方式来实现定时器,包括使用 Timer 和 TimerTask 类,使用 ScheduledExecutorService 等。 在 JAVA 中,Timer 和 TimerTask 是两个基本的类,用于实现定时器。Timer 类用于创建一个新的定时器,而...

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

    Java定时器,也被称为`Timer`类,是Java标准库中的一个强大工具,它允许开发者在指定的时间间隔执行任务,从而实现定时操作。这个类在`java.util`包中定义,是实现定时任务调度的核心。在本文中,我们将深入探讨`...

    java中定时器timer类的实现和源代码.docx

    它会维护一个`Vector`(在Java早期版本中使用,现在更推荐使用`ArrayList`或`LinkedList`)来存储`TimerTask`实例,并提供添加、删除以及检查定时器是否到期的方法。`TimerTasks`类还负责启动和停止定时器。 最后,...

    java定时器timer制作

    根据给定的信息,本文将详细解析Java定时器的制作及应用,同时对比.NET中的三种不同类型的定时器,以便更好地理解定时任务的实现方式及其特点。 ### Java定时器基础 Java中定时器(Timer)主要用于执行周期性的...

    Java定时器Timer简述.pdf

    Java定时器Timer是Java编程语言中用于计划执行任务的一种工具类。Timer类主要提供了定时任务的安排执行,对于需要在指定时间后、或者以固定周期重复执行任务的场景非常有用。本文档中介绍的Timer类的实现以及如何...

    java定时器Timer

    总结来说,Java定时器`Timer`是一个实用的工具,可以方便地实现定时任务调度,但在高并发场景下,由于其单线程模型,可能需要考虑使用更高级的并发工具,如`ScheduledExecutorService`。在实际开发中,理解其工作...

    java timer定时器详解(附详细代码)

    Java Timer定时器是Java语言中的一种常用的定时器机制,它可以帮助开发者实现一些需要在特定时间或特定间隔执行的任务。Java Timer定时器主要是通过java.util.Timer和java.util.TimerTask两个类来实现的。 Java....

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

    Java定时器并不是线程安全的,因此在多线程环境中使用时需要注意同步问题。如果多个线程同时修改Timer,可能会出现未定义的行为。 6. **TimerTask的生命周期**: 当TimerTask完成执行后,它会自动取消自身。但是...

    java中Timer定时器的使用

    总的来说,`Timer`和`TimerTask`是Java中实现简单定时任务的便利工具,但在高并发、高性能的场景下,可能需要考虑使用更强大的调度库,如`Quartz`或`Spring Framework`中的`ScheduledExecutorService`。

    java5定时器java Timer

    通过阅读`TimerTest1.java`和`TimerTest2.java`的代码,你可以进一步了解如何在实际项目中使用`Timer`和`TimerTask`来实现特定的定时任务需求。这两个测试类可能包含了创建`Timer`实例、创建`TimerTask`实例以及调度...

    JavaTimer定时器

    一个很简单的java定时器,很适合初学者呢,希望能够给你一点的提示哦

    Java定时器的使用 Java程序

    Java定时器(java.util.Timer)是Java标准库中用于调度任务执行的重要工具,它允许我们按照预设的时间间隔执行特定的任务。在Java程序设计中,定时器常常用于实现周期性的任务,比如定时备份数据、定时检查系统状态...

    JAVA定时器之Timer+TimerTask

    在Java编程语言中,`Timer`和`TimerTask`是两个关键类,它们构成了Java的定时执行机制。这两个类在处理周期性任务或者延迟任务时非常有用,它们可以帮助开发者实现程序在特定时间点或者按照一定间隔执行特定操作的...

    java_Timer定时器实例_Spring实例

    标题与描述均提到了“Java_Timer定时器实例_Spring实例”,这表明文章主要讨论的是如何在Java中使用Timer类创建定时任务,并将其整合到Spring框架中。以下是对该主题的详细解析: ### Java中的Timer定时器 #### ...

    Timer定时器的使用方法

    【Timer定时器的使用方法】 在Java编程语言中,`java.util.Timer` 和 `java.util.TimerTask` 类是用于执行定期或延时任务的核心组件。它们允许开发者在指定的时间间隔内执行特定的操作,这对于实现定时任务,如定时...

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

    【Java Timer定时器】 在Java中,`java.util.Timer` 类是用于调度任务的类,它可以在特定的时间点或者按照设定的周期执行某项任务。`Timer` 类提供了两种计划任务的方法:`schedule(TimerTask task, long delay)` ...

    java web定时器例子

    Java Web定时器主要指的是在Java Web应用程序中实现定时任务的功能,这在许多业务场景中都是必要的,例如数据备份、报表生成、邮件发送等。在Java中,我们可以利用内置的`java.util.Timer`类或者Spring框架的`@...

Global site tag (gtag.js) - Google Analytics