• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

java实现定时器的方法

武飞扬头像
菩提本无树007
帮助1

学新通

大家在工作中,常常会遇到一些突发的工作,需要在短时间内完成。这就要求我们能够快速的处理这些突发事件,但是如果直接调用方法来做,时间太长了,会导致程序变得臃肿。那么有没有什么好的办法呢?下面我们就来看下 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数组的最后一个元素,然后启动第二个定时器执行任务就行了。如果第一个定时器没有执行完任务的话,那么就会抛出异常来终止定时器工作了。

  • 三、示例代码

  • 四、总结

    最后我们再来回顾下之前讲过的内容: 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配置文件中开启定时器功能。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcbahj
系列文章
更多 icon
同类精品
更多 icon
继续加载