- package com.lid;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.Timer;
- import java.util.TimerTask;
- public class Test {
- public static void main(String[] args) {
- //timer1();
- timer2();
- //timer3();
- //timer4();
- }
- // 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)
- public static void timer1() {
- Timer timer = new Timer();
- timer.schedule(new TimerTask() {
- public void run() {
- System.out.println("-------设定要指定任务--------");
- }
- }, 2000);// 设定指定的时间time,此处为2000毫秒
- }
- // 第二种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行
- // schedule(TimerTask task, long delay, long period)
- public static void timer2() {
- Timer timer = new Timer();
- timer.schedule(new TimerTask() {
- public void run() {
- System.out.println("-------设定要指定任务--------");
- }
- }, 1000, 1000);
- }
- // 第三种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行。
- // scheduleAtFixedRate(TimerTask task, long delay, long period)
- public static void timer3() {
- Timer timer = new Timer();
- timer.scheduleAtFixedRate(new TimerTask() {
- public void run() {
- System.out.println("-------设定要指定任务--------");
- }
- }, 1000, 2000);
- }
- // 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行.
- // Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long 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 time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
- Timer timer = new Timer();
- timer.scheduleAtFixedRate(new TimerTask() {
- public void run() {
- System.out.println("-------设定要指定任务--------");
- }
- }, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行
- }
- }
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>
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语言中设置定时器。 首先,了解定时器的基本原理是非常重要的。在单片机中,定时器通常是以预设的频率运行,通过内部计数达到...
首先,让我们了解每种定时器的基本概念: 1. **系统定时器**:Delphi中的TTimer组件是基于Windows API的SetTimer函数实现的,它提供了一个简单的接口来创建周期性事件。用户可以通过调整Interval属性来设置定时器...
javaweb的几种定时方式,有助于了解定时的工作原理。对于定时器不了解的朋友可以看看
MCS-51单片机含有2个定时器/计数器,具有4种工作方式。具有两种工作模式(计数器模式和定时器模式) MCS-51单片机含有1个全双工串行口,具有4种工作方式。 TMOD-》定时器/计数器方式控制寄存器 TCON-》...
在实际应用中,选择哪种定时器主要取决于以下几个因素: - **应用场景**:如果是在WinForms中,可能首选System.Windows.Forms.Timer,而在控制台应用或服务器环境下,则更适合使用System.Threading.Timer或System....
终止Timer线程有几种方法,比如在run方法中调用timer的cancel方法、将Timer线程设置为守护线程等。 总之,Java中实现定时任务的三种主要方式各有特点,从简单的Timer到功能强大的Quartz再到易用的Spring Task,...
在04TimerDemo示例中,可能包含了如何创建和使用这两种定时器的代码实例。你可以通过查看源码学习如何在实际项目中集成和使用MFC定时器。记住,实践是检验理论的最好方式,尝试修改间隔时间、添加多个定时器或者改变...
CC2530的定时器T1是一种16位的定时器,可以工作在多种模式下,如自由运行、比较模式、捕获模式等。在查询方式下,程序需要周期性地检查定时器的状态,以便在特定时刻执行相应的动作。 配置定时器T1涉及以下几个步骤...
1. **定时器模式选择**:该工具支持51单片机定时器的几种工作模式,如正常模式、波特率发生器模式、计数器模式和捕获模式。用户可以根据实际需求选择合适的模式。 2. **定时时间计算**:输入所需的时间周期或频率,...
介绍了c#中实现时间定时器的几种方法:timer控件法、线程法、form本身的timer事件法,通过几个按钮的比对,可以知道他们的使用方法以及各自的优劣。尤其是多线程中做定时任务可以参考。涉及到委托、线程等技术。
在嵌入式系统开发中,ARM处理器是一种广泛应用的微处理器架构,它提供了丰富的硬件资源,包括定时器。本文将深入探讨ARM处理器中的定时器0和定时器1,并结合PROTEUS仿真工具进行讲解。 定时器在嵌入式系统中扮演着...
本篇文章通过对51单片机定时器C语言程序的分析,详细介绍了51单片机定时器的基本原理、工作模式以及如何进行初始化和编程。通过理解这些基础知识,读者可以更好地掌握51单片机定时器的应用技巧。
Quartz 介绍 Quartz 是一个开源的作业调度器,可以让开发者轻松地实现任务的定时执行。它提供了强大的调度功能,可以满足复杂的任务调度需求。Quartz 可以与 Spring 框架集成,以实现任务的定时执行。 Spring 中的...
JavaScript提供了两种主要类型的定时器:`setTimeout` 和 `setInterval`。 - **setTimeout**:用于在指定的毫秒数后调用一个函数或执行某段代码一次。它接受两个参数,第一个是待执行的函数或字符串代码,第二个...
首先,我们需要理解Windows API中的几种定时器机制。最常用的定时器包括SetTimer函数(消息驱动)和CreateTimerQueueTimer函数(线程池驱动)。然而,这些方法通常精度较低,可能只到毫秒级别。对于微秒级的定时需求...
在电子工程领域,51单片机是一种广泛应用的微控制器,尤其在教学和小型嵌入式系统中。本文将深入探讨如何利用51单片机的定时器功能来实现LED的延时闪烁。 51单片机的核心是Intel 8051微处理器,它包含几个内置的...
因此,我们需要寻找一种方法来创建一个非控件的毫秒级定时器。 毫秒级定时器的实现通常依赖于API(应用程序接口)调用,特别是Windows API中的几个关键函数,如`SetTimer`、`KillTimer`以及消息循环处理机制。以下...
MTK的定时器消息机制主要由以下几种数据结构构成: 1. **`stack_timer_struct`**:这是一种用于封装待处理定时消息的数据结构,包含了所有关于定时器的信息,如定时器ID、过期时间等。 2. **`TIMERTABLE`**:这是...
一个简单的定时器通常包含以下几个部分: 1. **预置值寄存器**:存储定时器的初始值,可以是时、分、秒的组合。 2. **计数器**:根据预置值进行递减计数。 3. **比较器**:检测计数器是否达到零,以判断定时器是否...