返回顶部
首页 > 资讯 > 后端开发 > Python >java中Timer定时器的使用和启动方式
  • 691
分享到

java中Timer定时器的使用和启动方式

2024-04-02 19:04:59 691人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录Timer定时器的使用和启动1.概述2.应用场景3.使用方法4.启动方法java的几种定时器小结1.@Scheduled注解2.quartz3.使用Timer4.使用线程控制Ti

Timer定时器的使用和启动

1.概述

定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的。在jdk中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务,但封装任务的类却是TimerTask类。

2.应用场景

我们使用timer的时候,一般有4种情况:

  • 指定时间执行
  • 指定时间执行后间隔指定时间重复执行
  • 启动任务之后多久执行
  • 启动任务后多久执行,执行之后指定间隔多久重复执行

3.使用方法

首先要通过继承 TimerTask 类 并实现 run() 方法来自定义要执行的任务(当然也可以写成匿名内部类),

需要创建一个定时器(Timer类对象),并通过Timer.schedule(TimerTask task,Date time) 方法执行时间运行任务

具体代码如下:


package timerdemo; 
import java.util.Timer;
import java.util.TimerTask; 
public class TimerDemo {
	public static void main(String[] args) {
		timerTest();
	}
	
	public static void timerTest(){
		//创建一个定时器
		Timer timer = new Timer();
		//schedule方法是执行时间定时任务的方法
		timer.schedule(new TimerTask() {
			
			//run方法就是具体需要定时执行的任务
			@Override
			public void run() {
				System.out.println("timer测试!!!");
			}
		}, 1000, 10000);
	}
}

这里的 schedule方法有4个,分别对应上面说的四种情况:

4.启动方法

1.在jar工程下启动

jar工程打成jar包,通过java -jar timer.jar 运行

2.这web工程下启动

spring中我们可以通过实现接口ApplicationListener,并重写public void onApplicationEvent(ApplicationEvent event) {}可以在容器初始话的时候执行这个方法

下面展示下web工程下每天00:00执行任务的代码:


@Component
public class SystemInitListener implements ApplicationListener<ContextRefreshedEvent> { 
	@Override
	public void onApplicationEvent(ContextRefreshedEvent event) {
		
		//创建定时器
		Timer timer = new Timer();
		Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE,1);
        calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),0,0,0);
        long timeInterval = 24 * 60 * 60 * 1000;
        timer.schedule(new TimerTask() {
			
			@Override
			public void run() {
				// 每天00:00需要做的事情				
			}
		}, calendar.getTime(), timeInterval);

java的几种定时器小结

总结一下我使用过的4种类型的定时器:@Scheduled注解、quartz、new Timer().schedule、使用线程控制。

1.@Scheduled注解

@Scheduled注解是最简单的方式,只需要启用定时器,在方法上添加注解即可。

在spring配置中加入:


<!-- 启用注解定时器 -->
 <task:annotation-driven />

在要具体的方法上加入注解@Scheduled


@Scheduled(cron = "0 0 * * * ? ")
    public void myTask(){
           //定时任务......
}

2.quartz

quartz使用的是可配置的方式,将所有的定时器都配置再一个xml文件里面。

步骤如下:

1.创建一个spring的配置文件:spring-quartz.xml

2.定义工作任务的job

3.定义触发器Trigger并与job绑定

4.定义调度器,并将Trigger注册到scheduler


   <bean id="myTask" class="cn.coolwind.MyTask"/>
 <!-- 1.定义工作任务job -->
    <bean id="testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 定时器的类  -->
        <property name="targetObject" ref="myTask"></property>
        <!-- 需要定时执行的方法  -->
        <property name="targetMethod" value="test"></property>
        <property name="concurrent" value="false"></property>
    </bean>
    <!-- 2.定义触发器Trigger并与Job绑定 -->
    <bean id="testJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="testJob"/>
        <!-- 根据需要设置定时执行的时间 -->
        <property name="cronExpression" value="0 0/5 * * * ?" />
    </bean>
 
   <!-- 3.定义调度器,并将trigger注册进去 -->
<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                 <ref local="testJobTrigger" />
            </list>
        </property>
    </bean>

最后记得将xml写入WEB.xml里!


    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
    classpath:applicationContext.xml,
    classpath:log4j.xml,
                classpath:spring-quartz.xml
   </param-value>
    </init-param>

3.使用Timer

使用Timer的schedule,schedule有3个参数:


schedule(TimerTask task, long delay, long period)

第一个为定时任务,根据业务需要重写TimerTask的run方法即可;

第二个为延时启动,单位毫秒;

第三个位多久运行一次,单位毫秒;


new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                try {
                    //do Something
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },0,5L * 60 * 1000);

4.使用线程控制

使用线程来控制就更灵活一些,可以根据自己的需要判断什么时候运行,什么时候停止,这需要对java的线程有一定的了解。


public class TaskTest {
    private static final ExecutorService pool = Executors.newFixedThreadPool(5);// 线程池
    public static final TaskTest me = new TaskTest();
    public final int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; 
    public static void main(String[] args) {
        me.start();
    }
 
    private void start() {
        pool.execute(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        for (int i = 0; i < arr.length; i++) {
                            if (1 == arr[i]) {
                                System.out.println("start!");
                                Thread.sleep(1*1000L);
                            }
                            if (6 == arr[i]) {
                                System.out.println("stop!");
                                Thread.sleep(5*1000L);
                            }
                            System.out.println(arr[i]);
                            if (9 == arr[i]) {
                                System.out.println("end!");
                                Thread.sleep(5*1000L);
                            }
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java中Timer定时器的使用和启动方式

本文链接: https://lsjlt.com/news/161058.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java中Timer定时器的使用和启动方式
    目录Timer定时器的使用和启动1.概述2.应用场景3.使用方法4.启动方法java的几种定时器小结1.@Scheduled注解2.quartz3.使用Timer4.使用线程控制Ti...
    99+
    2024-04-02
  • Java 中Timer和TimerTask 定时器和定时任务使用的例子
    这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求Timer类是用来执行任务的类,它接受一个TimerTask做参数Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),...
    99+
    2023-05-31
    timertask 定时器 tim
  • 如何在Java中使用Timer定时器
    如何在Java中使用Timer定时器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、概念      定时计划任务功能在J...
    99+
    2023-05-30
    java timer
  • java中Timer定时器怎么用
    小编给大家分享一下java中Timer定时器怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Timer定时器的使用和启动1.概述定时计划任务功能在Java中主...
    99+
    2023-06-22
  • java定时器timer的使用方法代码示例
     1.首先肯定是容器一启动就要启动定时器,所以我们可以选择把定时器写在一个监听器里,容器一启动所以监听器也就跟着启动,然后定时器就可以工作了。第一步,把自己写的监听器加到web.xml中;第二步,写一个监听器,实现ServletC...
    99+
    2023-05-30
    java timer 定时器
  • Java中的定时器Timer详解
    目录总结简单来说,定时器就相当于一个“闹钟”,给定时器设定一个任务,约定这个任务在xxx时间之后执行~ Timer类提供了一个核心接口,schedule(安排) 指定一个任...
    99+
    2024-04-02
  • 在java项目中如何使用Timer定时器
    在java项目中如何使用Timer定时器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。定时的功能我们在手机上见得比较多,比如定时清理垃圾,闹钟,等等.定时功能在...
    99+
    2023-05-31
    java 定时器 timer
  • Linux中Timer定时器怎么使用
    在Linux中,可以使用timer_create函数创建一个定时器,然后使用timer_settime函数设置定时器的间隔和触发方式...
    99+
    2023-10-26
    Linux
  • C#中Timer定时器类的简单使用
    目录System.Timers.Timer定时器简单使用设置初始属性简单示例–借用官方示例System.Timers.Timer 定时器就是经过固定时间,执行固定任务。 ...
    99+
    2024-04-02
  • C#中的Timer定时器类如何使用
    本文小编为大家详细介绍“C#中的Timer定时器类如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中的Timer定时器类如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。System.Timers...
    99+
    2023-06-30
  • 一文带你搞懂Java定时器Timer的使用
    目录一、定时器是什么二、自定义定时器一、定时器是什么 定时器类似于我们生活中的闹钟,可以设定一个时间来提醒我们。 而定时器是指定一个时间去执行一个任务,让程序去代替人工准时操作。 标...
    99+
    2023-01-09
    Java定时器Timer使用 Java定时器Timer Java定时器 Java Timer
  • Android定时器Timer的停止和重启实现代码
    本文介绍了Android定时器Timer的停止和重启实现代码,分享给大家,具体如下:7月份做了一个项目,利用自定义控件呈现一幅动画,当时使用定时器来控制时间,但是当停止开启时总是出现问题。一直在寻找合理的方法解决这个问题,一直没有找到,最近...
    99+
    2023-05-30
    重启 android 定时器
  • 深入了解Java定时器中的Timer的原理
    目录主要成员变量定时功能TimerThread结论Demo代码位置Java在1.3版本引入了Timer工具类,它是一个古老的定时器,搭配TimerTask和TaskQueue一起使用...
    99+
    2024-04-02
  • 详解Python定时器Timer的使用及示例
    目录1.定时器(1)线程定时器(Timer)解释:(2)Timer 的两种用法:2.队列3.线程池:4.案例1.定时器 Timer定时器源码实现,和自定义一个线程方式一样,都是继承T...
    99+
    2023-05-19
    Python 定时器 Python Timer
  • C#中的三种定时计时器Timer用法介绍
    在.NET中有三种计时器: 1、System.Windows.Forms命名空间下的Timer控件,它直接继承自Componet。Timer控件只有绑定了Tick事件和设置Enabl...
    99+
    2024-04-02
  • golang定时器Timer的用法和实现原理解析
    目录一文搞懂golang定时器Timer的用法和实现原理前言Timertimer结构体创建定时器停止定时器重置定时器实现原理数据结构runtimeTimer创建Timer停止Time...
    99+
    2023-05-15
    golang定时器 golang定时器Ticker
  • Vue中使用定时器的方式有哪些
    本篇内容主要讲解“Vue中使用定时器的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中使用定时器的方式有哪些”吧!js中定时器有两种,一个是循环执行 setInterval,另一...
    99+
    2023-07-05
  • golang定时器Timer的用法和实现原理是什么
    本篇内容介绍了“golang定时器Timer的用法和实现原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!TimerTimer是一种单...
    99+
    2023-07-06
  • 在 PHP 中启动和停止一个定时器
    本文将介绍在 PHP 中启动和停止定时器的方法。在 PHP 中使用 microtime() 函数来启动和停止定时器我们可以使用 microtime() 函数来启动和停止 PHP 中的定时器。microtim...
    99+
    2024-02-27
  • Vue中使用定时器(setInterval、setTimeout)的两种方式
    目录1. 循环执行( setInterval )2. 定时执行 ( setTimeout)js中定时器有两种,一个是循环执行 setInterval,另一个是定时执行 setTime...
    99+
    2023-03-19
    Vue使用定时器 Vue定时器setInterval setTimeout
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作