java中的定时器:在java中创建定时器的例子

146 阅读3分钟

我们已经在Linux中看到了许多基于cron作业的调度程序。Java也有一种机制,用TimerTimerTask Task来提供有限的调度机制。

如果你想要完全的保证调度,你可以使用quartz 调度器。在介绍这些类之前,我们必须用自己的计算逻辑用线程来写自己的自定义代码来调度任务。

计时器可以用在实时应用中,你有一个大型对象,希望每隔一小时与数据库同步一次,或者每隔4小时从apache日志中读取日志并插入数据库中。

Timer类实现了一个Runnable方法,用于创建一个线程。因此,Timer将在内部创建线程,使其在定期的时间间隔内执行给定的任务,并控制多个任务的执行,以重复的时间间隔实现任务的执行,或者我们可以推迟特定时间间隔的执行。

计时器在Java中的实现可以通过以下类来完成

  • 计时器类
  • TimerTask类

Timer 是用来指定每隔一段时间或在应用程序中的某个时间段内执行任务的。

Timer 是定义在 包中的java类java.util

它需要TimerTask ,执行间隔的时间。

TimerTask 是定义在java.util 包中的java类。它实现了一个 java.lang.runnable接口,其中有 run 方法可以覆盖 runTimerTask 的方法可以有你想应用的定时器功能的代码。

这个定时器任务可以在特定的时间间隔内多次调度。

非Dameon的定时器是使用Timer的默认构造函数实现的默认定时器。
让我们看看两个用例:

  • 假设你已经创建了定时器,这意味着线程是在后台创建的,一旦线程的运行方法执行完毕,定时器就不应该执行。
  • 另一种情况是,你必须只执行10秒钟的定时器,之后你必须取消定时器,开发者可以控制停止定时器的执行(使用定时器的cancel 方法)。

这个定时器会对性能产生影响,因为如果非Dameon的定时器正在执行,JVM无法停止。这里

  
Timer t=new Timer();  
Timer timer=Timer(false)

Dameon timer 是在启动和创建定时器时在后台线程中创建的。

Dameon定时器是一个定时器,即使你的应用程序生命结束也不会被停止。

由于定时器的完成依赖于线程,所以我们将看到主要的区别。

Dameon线程和非Dameon线程之间的区别?

Dameon Thread是一个后台线程,在后台创建和执行。

非Dameon线程的范围是一个应用程序的运行周期。一旦应用程序被停止,Dameon线程就会停止其执行。

这些线程在退出方法被调用、运行方法执行结束或发生异常时结束。

这是一个关于如何在重复的时间间隔内执行定时器的例子。

让我们来看看使用定时器类的例子,每隔一秒钟打印一次hello world消息,共10次。

import java.util.Timer;  
import java.util.TimerTask;  
  
public class HelloMessage extends TimerTask {  
 private int numberoftimes = 0;  
 public void run() {  
  numberoftimes++;  
  if (numberoftimes <= 10) {  
   System.out.println("Hello World....");  
  } else {  
   this.cancel();  
  }  
 }  
}  
class TimerExample {  
 public static void main(String[] args) {  
  Timer helloWorldTimer = new Timer();  
  helloWorldTimer.scheduleAtFixedRate(new HelloMessage(), 0, 1000);  
 }  
}  

以下是一系列的步骤

  • 计时器对象被创建
  • 调用定时器scheduleAtFixedRate() ,其中有TimerTask 工作,其中有为定时器执行的实际代码。
  • 为此,我们编写了自定义java类HelloMessage ,它扩展了TimerTask ,并重写了run 的执行方法。
  • 我们使用cancel method ,在重复执行10次后结束定时器的寿命。

Timer.scheduleAtFixedRate方法使用TimerTaskdelay=0,period=1 第二步。

import java.util.Timer;
import java.util.TimerTask;

public class CounterTimer {
    public static void main(String[] args) {
        Timer timer = new Timer();

        TimerTask task = new TimerTask(){
            private int k = 0;
            public void run(){
                    System.out.println("executes function for every 1 Second"+ k);
                    k++;

            }
        };
        timer.scheduleAtFixedRate(task, 0, 1000); //1000ms = 1sec

    }
}

希望你对java中的基本定时器有足够的了解,以便你执行。

如果你有任何问题或喜欢我的文章,请自由评论。