Java定时器:在本教程中,学习如何在java中创建一个定时器和定时任务的例子。
我们已经在Linux中看到了许多基于cron作业的调度程序。Java也有一种机制,用Timer 和TimerTask 任务来提供有限的调度机制。
如果你想要一个完整的承诺调度程序,你可以使用quartz 调度程序。
在引入定时器类之前,我们必须用自己的计算逻辑用线程写出自己的自定义代码来调度任务。
timer 可以用在实时应用程序中,你有一个大的对象,希望每隔一小时与数据库同步一次,或者每隔4小时从apache日志中读取日志并插入数据库中。
Timer类实现了一个Runnable方法,用于创建一个线程。因此,Timer将在内部创建线程,使其在定期的时间间隔内执行给定的任务,并控制多个任务的执行,实现任务的重复执行,或者我们可以推迟执行特定的时间间隔。
计时器在Java中的实现可以通过以下几个类来完成
- 计时器类
- TimerTask类
Timer 用于指定每隔一段时间或在应用程序中的某个时间段内的任务执行。
Timer 是定义在 包中的java类java.util
它需要TimerTask ,执行间隔的时间。
这个定时器任务可以在一个特定的时间间隔持续时间内被多次安排。
非Dameon的定时器是使用Timer的默认构造函数实现的默认定时器。
让我们看看两个用例。
- 假设你已经创建了一个定时器,这意味着线程是在后台内部创建的,一旦线程的运行方法执行完毕,定时器就不应该执行。
- 另一种情况是,你必须只执行10秒钟的定时器,之后你必须取消定时器,开发者可以控制停止定时器的执行(使用定时器的
cancel方法)。
这个定时器会对性能产生影响,因为如果非Dameon的定时器正在执行,JVM无法停止。
Timer t=new Timer();
Timer timer=Timer(false)
Dameon timer 在启动和创建定时器时,在后台线程中创建。可以使用以下代码来创建Dameon定时器
Dameon定时器是一个即使你的应用程序生命结束也不会被停止的定时器。
由于定时器的完成依赖于线程,所以我们将看到主要的区别。
Dameon线程和非Dameon线程之间的区别?
Dameon线程是一个后台线程,在后台创建和执行,范围是JVM的运行时间
非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方法采用TimerTask ,delay=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中的基本定时器有足够的了解,以便你执行。
如果你有任何问题或喜欢我的文章,请自由评论。