`
wisfly
  • 浏览: 62991 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

几种定时器介绍

 
阅读更多

1:java定时器的几种用法

  1. package com.lid;  
  2.   
  3. import java.util.Calendar;  
  4. import java.util.Date;  
  5. import java.util.Timer;  
  6. import java.util.TimerTask;  
  7.   
  8. public class Test {  
  9.     public static void main(String[] args) {  
  10.         //timer1();  
  11.         timer2();  
  12.         //timer3();  
  13.         //timer4();  
  14.     }  
  15.   
  16.     // 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)  
  17.     public static void timer1() {  
  18.         Timer timer = new Timer();  
  19.         timer.schedule(new TimerTask() {  
  20.             public void run() {  
  21.                 System.out.println("-------设定要指定任务--------");  
  22.             }  
  23.         }, 2000);// 设定指定的时间time,此处为2000毫秒  
  24.     }  
  25.   
  26.     // 第二种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行  
  27.     // schedule(TimerTask task, long delay, long period)  
  28.     public static void timer2() {  
  29.         Timer timer = new Timer();  
  30.         timer.schedule(new TimerTask() {  
  31.             public void run() {  
  32.                 System.out.println("-------设定要指定任务--------");  
  33.             }  
  34.         }, 10001000);  
  35.     }  
  36.   
  37.     // 第三种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行。  
  38.     // scheduleAtFixedRate(TimerTask task, long delay, long period)  
  39.     public static void timer3() {  
  40.         Timer timer = new Timer();  
  41.         timer.scheduleAtFixedRate(new TimerTask() {  
  42.             public void run() {  
  43.                 System.out.println("-------设定要指定任务--------");  
  44.             }  
  45.         }, 10002000);  
  46.     }  
  47.      
  48.     // 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行.  
  49.     // Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)  
  50.     public static void timer4() {  
  51.         Calendar calendar = Calendar.getInstance();  
  52.         calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时  
  53.         calendar.set(Calendar.MINUTE, 0);       // 控制分  
  54.         calendar.set(Calendar.SECOND, 0);       // 控制秒  
  55.   
  56.         Date time = calendar.getTime();         // 得出执行任务的时间,此处为今天的12:00:00  
  57.   
  58.         Timer timer = new Timer();  
  59.         timer.scheduleAtFixedRate(new TimerTask() {  
  60.             public void run() {  
  61.                 System.out.println("-------设定要指定任务--------");  
  62.             }  
  63.         }, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行  
  64.     }  
  65. }  

2:spring中定时器的使用

 

在Spring中有两种方式可以实现定时器的功能,分别是Scheduled注释方式和XML配置方式,本博客将介绍如何在Spring中使用Scheduled注释方式的方式实现定时器的功能,代码及相应的解释如下:

代码1—Spring配置文件(applicationContext.xml文件):

 

 

 

<beans beans="" context="" http:="" schema="" spring-beans-2.5.xsd="" spring-context-2.5.xsd="" spring-task-3.2.xsd="" task="" www.springframework.org=""
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemalocation="http://www.springframework.org/schema/beans">
  <context:annotation-config>
    <context:component-scan base-package="com.ghj/">
      <task:executor id="executor" pool-size="5">
        <task:scheduler id="scheduler" pool-size="10">
           <task:annotation-driven executor="executor" scheduler="scheduler">
           </task:annotation-driven>
        </task:scheduler>
      </task:executor>
    </context:component-scan>
  </context:annotation-config>
</beans>

 

 

代码2——Spring定时器测试类(SpringTimerTest.java文件):

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.ghj.packageoftimer;
 
import java.text.SimpleDateFormat;
import java.util.Date;
 
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
/**
 * Spring定时器测试类
 *
 * @author 高焕杰
 */
@Component//将本类完成bean创建和自动依赖注入
public class SpringTimerTest{
     
    /**
     * Spring定时器测试方法
     *
     * @author 高焕杰
     */
    @Scheduled(cron = 0 0/1 * * * ?)//通过@Scheduled注释将该方法定义为Spring定时调用的方法,其中cron用于指明该方法被调用的时机
    public void test(){
        System.err.println(new SimpleDateFormat(yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒).format(new Date()));
    }
}

 

代码3——加载Spring配置文件并启动Spring定时器的类(StartSpringTimer.java文件):

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.ghj.packageoftest;
 
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
/**
 * 加载Spring配置文件,启动Spring定时器
 *
 * @author 高焕杰
 */
public class StartSpringTimer {
 
    public static void main(String[] args){
        new ClassPathXmlApplicationContext(conf/spring/applicationContext.xml);
        System.out.println(加载Spring配置文件完毕,Spring定时器成功启动!!!);
    }
}

 

这种方式实现Spring定时器的优点:

采用这种方式实现定时器的功能是我最喜欢的,这种方式简单灵活——只要在已被加载到Spring容器中的类内的方法上添加Scheduled注释并指定该方法的时机即可。

答疑解惑:

如果你是有心人,你可能会有这样的疑惑加载中...:在采用这种方式实现的Spring定时器时被Scheduled注释的方法的访问权限有没有特别的要求,呵呵呵加载中...,这是没有什么特别的要求的,你完全可以把该方法定义为私有的,这样就不会把该方法暴漏出去了。

 

分享到:
评论

相关推荐

    单片机C语言编程定时器的几种表达方法

    本篇文章主要介绍了几种常见的方法,帮助初学者理解定时器初值的计算过程,以及如何在C语言中设置定时器。 首先,了解定时器的基本原理是非常重要的。在单片机中,定时器通常是以预设的频率运行,通过内部计数达到...

    delphi 几个定时器方法的比较

    首先,让我们了解每种定时器的基本概念: 1. **系统定时器**:Delphi中的TTimer组件是基于Windows API的SetTimer函数实现的,它提供了一个简单的接口来创建周期性事件。用户可以通过调整Interval属性来设置定时器...

    javaweb 定时器的几种方式

    javaweb的几种定时方式,有助于了解定时的工作原理。对于定时器不了解的朋友可以看看

    MCS-51单片机定时器和计数器的4种工作方式解析

    MCS-51单片机含有2个定时器/计数器,具有4种工作方式。具有两种工作模式(计数器模式和定时器模式)  MCS-51单片机含有1个全双工串行口,具有4种工作方式。  TMOD-》定时器/计数器方式控制寄存器  TCON-》...

    C#中三种定时器对象的比较

    在实际应用中,选择哪种定时器主要取决于以下几个因素: - **应用场景**:如果是在WinForms中,可能首选System.Windows.Forms.Timer,而在控制台应用或服务器环境下,则更适合使用System.Threading.Timer或System....

    使用java定时器的几种方式

    终止Timer线程有几种方法,比如在run方法中调用timer的cancel方法、将Timer线程设置为守护线程等。 总之,Java中实现定时任务的三种主要方式各有特点,从简单的Timer到功能强大的Quartz再到易用的Spring Task,...

    MFC定时器的使用 MFC定时器的使用

    在04TimerDemo示例中,可能包含了如何创建和使用这两种定时器的代码实例。你可以通过查看源码学习如何在实际项目中集成和使用MFC定时器。记住,实践是检验理论的最好方式,尝试修改间隔时间、添加多个定时器或者改变...

    CC2530查询方式使用定时器

    CC2530的定时器T1是一种16位的定时器,可以工作在多种模式下,如自由运行、比较模式、捕获模式等。在查询方式下,程序需要周期性地检查定时器的状态,以便在特定时刻执行相应的动作。 配置定时器T1涉及以下几个步骤...

    51定时器计算工具

    1. **定时器模式选择**:该工具支持51单片机定时器的几种工作模式,如正常模式、波特率发生器模式、计数器模式和捕获模式。用户可以根据实际需求选择合适的模式。 2. **定时时间计算**:输入所需的时间周期或频率,...

    C#中时间定时的几种方案及比较

    介绍了c#中实现时间定时器的几种方法:timer控件法、线程法、form本身的timer事件法,通过几个按钮的比对,可以知道他们的使用方法以及各自的优劣。尤其是多线程中做定时任务可以参考。涉及到委托、线程等技术。

    定时器0和定时器1 ARM PROTEUS

    在嵌入式系统开发中,ARM处理器是一种广泛应用的微处理器架构,它提供了丰富的硬件资源,包括定时器。本文将深入探讨ARM处理器中的定时器0和定时器1,并结合PROTEUS仿真工具进行讲解。 定时器在嵌入式系统中扮演着...

    51单片机定时器C语言程序

    本篇文章通过对51单片机定时器C语言程序的分析,详细介绍了51单片机定时器的基本原理、工作模式以及如何进行初始化和编程。通过理解这些基础知识,读者可以更好地掌握51单片机定时器的应用技巧。

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    Quartz 介绍 Quartz 是一个开源的作业调度器,可以让开发者轻松地实现任务的定时执行。它提供了强大的调度功能,可以满足复杂的任务调度需求。Quartz 可以与 Spring 框架集成,以实现任务的定时执行。 Spring 中的...

    js页面显示多个定时器

    JavaScript提供了两种主要类型的定时器:`setTimeout` 和 `setInterval`。 - **setTimeout**:用于在指定的毫秒数后调用一个函数或执行某段代码一次。它接受两个参数,第一个是待执行的函数或字符串代码,第二个...

    一种制作微秒级精度定时器的方法.rar_C++ 定时器_timer_微秒定时器_高精度定时_高精度定时器

    首先,我们需要理解Windows API中的几种定时器机制。最常用的定时器包括SetTimer函数(消息驱动)和CreateTimerQueueTimer函数(线程池驱动)。然而,这些方法通常精度较低,可能只到毫秒级别。对于微秒级的定时需求...

    定时器中断闪烁_定时器_

    在电子工程领域,51单片机是一种广泛应用的微控制器,尤其在教学和小型嵌入式系统中。本文将深入探讨如何利用51单片机的定时器功能来实现LED的延时闪烁。 51单片机的核心是Intel 8051微处理器,它包含几个内置的...

    vb6做的毫秒级定时器(非控件)

    因此,我们需要寻找一种方法来创建一个非控件的毫秒级定时器。 毫秒级定时器的实现通常依赖于API(应用程序接口)调用,特别是Windows API中的几个关键函数,如`SetTimer`、`KillTimer`以及消息循环处理机制。以下...

    MTK定时器消息机制

    MTK的定时器消息机制主要由以下几种数据结构构成: 1. **`stack_timer_struct`**:这是一种用于封装待处理定时消息的数据结构,包含了所有关于定时器的信息,如定时器ID、过期时间等。 2. **`TIMERTABLE`**:这是...

    verilog定时器_定时器_verilog_verilog定时器_verilog定时_doingmco_

    一个简单的定时器通常包含以下几个部分: 1. **预置值寄存器**:存储定时器的初始值,可以是时、分、秒的组合。 2. **计数器**:根据预置值进行递减计数。 3. **比较器**:检测计数器是否达到零,以判断定时器是否...

Global site tag (gtag.js) - Google Analytics