大家在工作中,常常会遇到一些突发的工作,需要在短时间内完成。这就要求我们能够快速的处理这些突发事件,但是如果直接调用方法来做,时间太长了,会导致程序变得臃肿。那么有没有什么好的办法呢?下面我们就来看下 java中是如何实现定时器的。 在 Java中有很多方法可以实现定时器,其中比较常见的就是 counter和 notify,它们都可以用来设置时间,并且实现了一种功能叫做 arr。 其中 arr ()方法在很多地方都可以用到,在这里面我们主要讲的是 setTimeout方法。setTimeout是一个定时器,当时间达到时,就会抛出一个异常。这个方法在平时的工作中使用非常多。

  • 一、功能介绍

    上面的代码中,我们可以看到在 setTimeout方法中,会给出一个时间的值,并且这个时间是由线程来执行的,所以我们可以根据这个时间值来设置线程的执行顺序。 1. setTimeout ()方法的参数是一个内置的常量,表示一个变量,也就是一个方法。该方法会在当前线程执行完毕时自动释放。在这个方法中,首先会先创建一个 static对象,然后用来存储这个常量。由于我们设置了一个时间,所以这个常量会被阻塞。 2. setTimeout ()方法可以设置在指定时间之后,线程才会开始执行。由于是在指定时间之后才开始执行,所以不会出现超时的情况。 3.当线程执行完毕后,会对当前线程的状态进行更新,并且为我们创建一个新的常量对象。在这个对象中,有一个 dump方法,里面会把所有线程中保存的常量进行汇总。 4.当调用 setTimeout ()方法时,不需要重新初始化这个常量。 5.在运行过程中,如果出现异常,将会抛出一个异常。 6.最后提醒大家一下: setTimeout方法有很多种用法,在这里我们选择了最常见的一种使用方法: 当 setTimeout方法执行完后,就会调用 new System ()函数来创建一个新的对象。当新对象创建完毕后就会进行初始化,在这个过程中调用 setTimeout ()方法会抛出一个异常。当抛出异常后就可以停止这个线程的运行。

  • 二、实现原理

    下面我们来看看 setTimeout方法的实现原理。 setTimeout方法的第一个参数是定时器数组,这个数组是在 java. util. TimeData包中定义的。这里面包括了一个 timestamp数组,以及一个 time参数,这里需要注意的是 time参数,在 setTimeout方法中是一个不带参数的 time参数,这个 time参数是用来设置定时器数组所需的时间,而不是用来设置定时器的时间。然后就是一个数组,这里就不解释了。 第二个参数是返回值,当定时器设置好之后,返回值就是一个 timestamp数组。当达到时间点时,会抛出一个异常来停止定时器工作。 如果要实现多线程的定时器,可以在 setTimeout方法中加入多个线程。这样可以多个线程一起工作,并不会出现任务积压的情况。然后在多线程的状态下, setTimeout方法可以设置定时器退出的时间,如果在设定的时间内没有执行完任务的话,就会抛出异常。 如果我们有多个任务要完成,但是每一个任务都要执行很久才能完成的话,就可以使用多线程来配合完成。首先我们要先定义一个线程,在这个线程里面可以放两个定时器。 第一个定时器叫做 timestamp数组,这个数组包含了一个 time参数。接着我们把第一个定时器设置好之后就可以使用第二个定时器了。这个第二个定时器和第一个定时器是一样的,只是在 timestamp数组中添加了一个 timestamp数组元素。接下来就是执行的问题了。 第一个线程设置好 timestamp之后,把第二个定时器设为 timestamp数组的最后一个元素,然后启动第二个定时器执行任务就行了。如果第一个定时器没有执行完任务的话,那么就会抛出异常来终止定时器工作了。

  • 三、示例代码

    示例代码的源码中,有两个变量,一个是 counter,一个是 setTimeout。首先,我们先创建一个空的变量。我们需要设置一个时间为60秒。这个变量就是 counter变量,可以设置成具体的时间点。 下面我们来创建一个 setTimeout变量,这个变量需要在第一次调用 setTimeout方法时创建。 首先我们对上面的代码进行封装,使其在第一次调用 setTimeout方法时,就创建了一个新的变量。下面是封装后的代码: 我们发现如果用 counter方法来设置时间的话,会抛出异常,因此我们在上面设置了一个 notify方法来设置时间。 上面是创建新变量 setTimeout的代码,下面是对这个变量进行初始化的代码: 在这里我们需要注意两点: 第一点是 setTimeout方法一定要在第一次调用时创建。如果不创建这个变量的话,程序在运行过程中,这个变量就会抛出异常。 第二点是 notify方法不能重复调用。因为当调用了 notify方法后,程序就会终止运行。如果要再次调用该方法的话,程序就会抛出一个异常。 下面我们来看下 notify的效果: 上面这段代码是不是很简单呢?通过上面的操作,我们可以把所有的时间都设置好了。在这个例子中,如果时间已经到了60秒,那么就会抛出异常。这样就可以很快的处理突发事件了。 以上就是 java中实现定时器的方法了,希望对大家有所帮助!最后给大家分享一个免费的学习资料:《Java核心技术要点》(最新版)资料领取入口!

  • 四、总结

    最后我们再来回顾下之前讲过的内容: java中的时间是以毫秒为单位的,我们在设置好一个时间以后,程序会自动把这个时间转换为一毫秒。另外,当我们需要修改某个变量的值时,也是要用到这个方法的,比如设置一个变量的初始值为1,而现在修改了变量的值,那么这个变量会被转换为0.1或者0.01。 在定时器中,有一个重要的参数叫做 top ()方法,当我们调用它的时候会产生一个异常。当我们给这个方法设置时间时,如果时间达到了就会抛出一个异常。 最后我们总结一下: 1、 counter和 notify都是可以实现定时器的。notify是使用 arr ()方法来设置时间,而 counter使用 setTimeout方法来设置时间。 2、 setTimeout方法在程序运行中会抛出一个异常,这个异常可以通过调用 notify方法来释放内存。

常用的java定时器代码如下:

1. 使用Timer类实现定时器
```java
import java.util.Timer;
import java.util.TimerTask;
public class MyTimer {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("定时器任务执行了");
}
}, 1000, 2000);
}
}
```
上述代码中,使用Timer类创建定时器,schedule方法可以设置定时器任务的执行时间和间隔时间。
2. 使用ScheduledExecutorService类实现定时器
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class MyTimer {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("定时器任务执行了");
}
}, 1000, 2000, TimeUnit.MILLISECONDS);
}
}
```
上述代码中,使用ScheduledExecutorService类创建定时器,scheduleAtFixedRate方法可以设置定时器任务的执行时间和间隔时间。
3. 使用Spring的@Scheduled注解实现定时器
```java
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class MyTimer {
@Scheduled(initialDelay = 1000, fixedDelay = 2000)
public void timerTask() {
System.out.println("定时器任务执行了");
}
}
```
上述代码中,使用Spring的@Scheduled注解创建定时器,initialDelay属性可以设置定时器任务的初始延迟时间,fixedDelay属性可以设置定时器任务的间隔时间。需要在Spring配置文件中开启定时器功能。

java实现定时器的方法相关推荐

  1. Java实现定时器的几种方法

    目录 方法1:使用Timer和和TimerTask类 方法2:使用线程池 方法3:使用Spring Task 方法4:通过quartz任务调度工具 Java实现定时器的方法有很多,本章主要浅谈一下知道 ...

  2. java之定时器任务Timer用法

    在项目开发中,经常会遇到需要实现一些定时操作的任务,写过很多遍了,然而每次写的时候,总是会对一些细节有所遗忘,后来想想可能是没有总结的缘故,所以今天小编就打算总结一下可能会被遗忘的小点: 1. pub ...

  3. Java的定时器Timer和定时任务TimerTask应用以及原理简析

    记录:272 场景:Java JDK自带的定时器Timer和定时任务TimerTask应用以及原理简析.在JDK工具包:java.util中可以找到源码,即java.util.Timer和java.u ...

  4. java web定时器_java的web项目中使用定时器 | 学步园

    之前接触过程序中的定时任务,但是没去自己亲自尝试过.终于这次抽空搞了一下.(一定要自己去操作,才能长经验,光看到过是没用的) 以下是两种方法,我使用的是监听的方法. JAVA WEB定时器,定时器的启 ...

  5. Java 动态定时器

    最近项目里需要添加定时任务,定时任务要求可以动态控制,虽然quartz和spring Schedule Task可以实现,但是感觉不够灵活,简单.于是,索性自己实现一个. 本Java 动态定时器基于J ...

  6. Java实现定时器(Timer)

    1.定时器的介绍 人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的.定时器确实是一项了不起的发明,使相当多需要人控制 ...

  7. java带参数的方法笔记_具有Java参数的方法的类声明

    类声明可以包含在Java中具有参数的方法.演示此过程的程序如下: 示例class Message { public void messagePrint(String msg) { System.out ...

  8. java.util.Collections.synchronizedSet()方法的使用

    下面的例子显示java.util.Collections.synchronizedSet()方法的使用 package com.;import java.util.*;public class Col ...

  9. java -version cmd_java如何运行步骤cmd?Java执行cmd命令方法有哪些?

    写好一个java程序之后,我们的最终目的就是可以正确的运行程序,如果程序运行正确了,那么代码也就没有什么问题了,可是java如何运行步骤cmd?接下来,我们就来给大家讲解一下这方面的内容. 1.首先用 ...

最新文章

  1. 树莓派教程之树莓派系统镜像刷入和远程登陆(1)
  2. 云服务器上安装jboss_jboss的使用和安装
  3. 【网易云信 x 齿轮易创】互联网时代,如何在教育行业抢占C位
  4. matlab红外图像温度提取,一种基于红外热图的温度提取方法.pdf
  5. 《深入理解Kafka:核心设计与实践原理》笔误及改进记录
  6. awk正则匹配nginx日志【原创】
  7. 简单梳理帆软报表即决策系统的登录步骤 一
  8. 专门针对音乐发烧友开发的5款App
  9. js求数组最大值方法汇总
  10. html网页显示时中文乱码
  11. 459.重复的子字符串
  12. 射频能量用于治疗和美容
  13. 如何用html代码做表格里的对角线,如何用用div+css模拟表格对角线
  14. ARM汇编之合法立即数的快速判断方法
  15. 办公:office办公软件Excel表格的打印技巧
  16. Treasure Project(藏宝计划)冲刺百倍!
  17. iMeta | 华南农大曾振灵/熊文广等-家庭中宠物犬与主人耐药基因的共存研究
  18. 电源完整性系统设计总结
  19. 华为路由器默认用户名密码
  20. 在线播放器代码大全(avi/mpg/rm/wmv/)

热门文章

  1. 搭建 ESP8266 开发环境(windows)
  2. OpenCV边缘检测(二)——Sobel边缘检测
  3. 几种还款的方式中本金和利息的计算
  4. IDEA乱码问题解决
  5. 戴尔 Latitude E5480更换固态硬盘镁光MX500
  6. 频繁gc是什么意思_一次性搞清楚线上CPU100%,频繁FullGC排查套路
  7. 20230220英语学习
  8. SQL SERVER DATEPART函数
  9. LiveGBS流媒体平台GB/T28181功能-摄像头SDK硬件NVR录像下级海康等平台录像回看设备录像查看下载
  10. 修改ubuntu hostname