iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 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://www.lsjlt.com/news/161058.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java中Timer定时器的使用和启动方式
    目录Timer定时器的使用和启动1.概述2.应用场景3.使用方法4.启动方法java的几种定时器小结1.@Scheduled注解2.quartz3.使用Timer4.使用线程控制Ti...
    99+
    2022-11-12
  • 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的使用方法代码示例
     1.首先肯定是容器一启动就要启动定时器,所以我们可以选择把定时器写在一个监听器里,容器一启动所以监听器也就跟着启动,然后定时器就可以工作了。第一步,把自己写的监听器加到web.xml中;第二步,写一个监听器,实现ServletC...
    99+
    2023-05-30
    java timer 定时器
  • 在java项目中如何使用Timer定时器
    在java项目中如何使用Timer定时器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。定时的功能我们在手机上见得比较多,比如定时清理垃圾,闹钟,等等.定时功能在...
    99+
    2023-05-31
    java 定时器 timer
  • 一文带你搞懂Java定时器Timer的使用
    目录一、定时器是什么二、自定义定时器一、定时器是什么 定时器类似于我们生活中的闹钟,可以设定一个时间来提醒我们。 而定时器是指定一个时间去执行一个任务,让程序去代替人工准时操作。 标...
    99+
    2023-01-09
    Java定时器Timer使用 Java定时器Timer Java定时器 Java Timer
  • C#中Timer定时器类的简单使用
    目录System.Timers.Timer定时器简单使用设置初始属性简单示例–借用官方示例System.Timers.Timer 定时器就是经过固定时间,执行固定任务。 ...
    99+
    2022-11-13
  • C#中的Timer定时器类如何使用
    本文小编为大家详细介绍“C#中的Timer定时器类如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中的Timer定时器类如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。System.Timers...
    99+
    2023-06-30
  • Vue中使用定时器的方式有哪些
    本篇内容主要讲解“Vue中使用定时器的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中使用定时器的方式有哪些”吧!js中定时器有两种,一个是循环执行 setInterval,另一...
    99+
    2023-07-05
  • 利用java怎么在项目启动时执行指定的方法
    这篇文章将为大家详细讲解有关利用java怎么在项目启动时执行指定的方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。配置web.xml <listener> ...
    99+
    2023-05-31
    java ava
  • Vue中使用定时器(setInterval、setTimeout)的两种方式
    目录1. 循环执行( setInterval )2. 定时执行 ( setTimeout)js中定时器有两种,一个是循环执行 setInterval,另一个是定时执行 setTime...
    99+
    2023-03-19
    Vue使用定时器 Vue定时器setInterval setTimeout
  • Brave 浏览器 1.56 使用“关闭记录”模式和自定义快捷方式启动
    今日,Brave Software发布了稳定频道上的Brave浏览器版本1.56。最新版本的基于Chromium的浏览器增加了对最近推出的Off The Record模式,自定义键盘快捷键和对证书透明度的支持的支持。发布频道版本从 1.53...
    99+
    2023-07-30
  • 在springboot中使用定时任务的方式
    本篇内容介绍了“在springboot中使用定时任务的方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springboot定时任务在spr...
    99+
    2023-06-20
  • vue项目中使用rimraf dev启动时删除dist目录方式
    目录使用rimraf dev启动时删除dist目录vue修改dist目录使用rimraf dev启动时删除dist目录 适用 vue 2.x vue 3.x已经会在启动时自动删除di...
    99+
    2022-11-13
  • java中动态绑定的使用方法
    这篇文章主要介绍了java中动态绑定的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、用法程序在编译的时候调用的其实是父类的 eat 方法,但是在运行时运行的则是子...
    99+
    2023-06-15
  • Flex中定义和使用渲染器的方式
    这篇文章主要讲解了“Flex中定义和使用渲染器的方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flex中定义和使用渲染器的方式”吧!Flex中使用渲染器(ItemRenderer)Fle...
    99+
    2023-06-17
  • 浅谈在springboot中使用定时任务的方式
    springboot定时任务 在springboot环境下有多种方法,这里记录下使用过的其中两种;1、使用注解,2、通过实现接口的方式。 使用注解的方式虽然比较简单,但是如果项目需要...
    99+
    2022-11-12
  • Android中使用定时器的三种方法
    本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下 图示: 因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handle...
    99+
    2022-06-06
    方法 定时器 Android
  • gxworks2中定时器的使用方法是什么
    在GX Works2中,使用定时器的方法如下: 打开GX Works2软件,创建一个新的工程或打开一个已有的工程。 在工程中...
    99+
    2023-10-26
    gxworks2
  • 在Python定时器中Lock的实际应用方式介绍
    这篇文章主要讲解了“在Python定时器中Lock的实际应用方式介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Python定时器中Lock的实际应用方式介绍”吧!在Python定时器中...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作