定时器Timer如何终止运行的问题

  JAVA自带了一个定时器,那就是Timer,要实现一个Timer的demo非常简单:

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

class Task extends TimerTask{
    @Override
    public void run() {
        System.out.println("******程序执行******");
    }
}

public class TaskTest {
    public static void main(String[] args){
        Timer timer = new Timer();
        Task task = new Task() ;
        timer.schedule(task, 3000);    //这里的单位是毫秒
    }
}

 

  用Eclipse运行一下, 问题来了,明明程序已经执行结束,为何却没有自动关闭呢?

 

  本着学习的精神,百度了一下,发现问这个问题的还真不少。明明已经结束,却为什么没有自动终止程序,这是因为系统默认当Timer运行结束后,如果没有手动终止,那么则只有当系统的垃圾收集被调用的时候才会对其进行回收终止。既然这样,我们可以使用System.gc()来实现程序的手动终止:

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

class Task extends TimerTask{
    @Override
    public void run() {
        System.out.println("******程序执行******");
        System.gc();
    }
}

public class TaskTest {
    public static void main(String[] args){
        Timer timer = new Timer();
        Task task = new Task() ;
        timer.schedule(task, 3000);    //这里的单位是毫秒
    }
}

 

  运行一下,OK,程序运行结束的同时,也成功终止。

  但是Sytem.gc()在一个项目中是不能随便调用的,我们做做小测试如此做无可厚非,但是在项目中如此写,太不合实际了。

  那么我们可以考虑用Timer类自带的cancel()方法,实现Timer的终止。

  来看一下API中对cancel()方法的描述:

 

public void cancel()
Terminates this timer(终结这个timer), discarding any currently scheduled tasks(抛弃所有当前正在执行的TimerTask). Does not interfere with a currently executing task (if it exists). Once a timer has been terminated, its execution thread terminates gracefully, and no more tasks may be scheduled on it.
Note that calling this method from within the run method of a timer task that was invoked by this timer absolutely guarantees that the ongoing task execution is the last task execution that will ever be performed by this timer.

This method may be called repeatedly; the second and subsequent calls have no effect.

  那么我们来实现一下:

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

public class TaskTest {
    public static void main(String[] args) {
        Timer timer = new Timer();
        // 三秒后开始执行,每隔一秒执行一次
        timer.schedule(new Task(timer), 3 * 1000, 1000);
    }
}

class Task extends TimerTask {
    private Timer timer;

    public Task(Timer timer) {
        this.timer = timer;
    }

    int i = 1;

    @Override
    public void run() {
        System.out.println("******程序执行******");
        //当执行到第5秒,程序结束
        if (i++ == 5) {
            this.timer.cancel();
            System.out.println("#### 程序结束 ####");
        }
    }
}

 

  OK,成功结束程序。

转载于:https://www.cnblogs.com/gaorongyi/p/5032660.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Python 中,我们可以使用 `time` 模块来实现定时器功能。具体步骤如下: 1. 导入 `time` 模块。 ```python import time ``` 2. 使用 `time.sleep()` 函数来实现暂停功能。该函数接受一个浮点数参数,表示暂停的秒数。 ```python time.sleep(5) # 暂停 5 秒 ``` 3. 使用循环语句和定时器变量来实现定时器功能。例如,以下代码会每隔 1 秒输出一次当前时间。 ```python while True: print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) time.sleep(1) ``` 上述代码中,`time.strftime()` 函数用于将当前时间格式化为指定的字符串格式,`time.localtime()` 函数用于获取当前时间的本地时间结构体。在循环体内部,先输出当前时间,然后暂停 1 秒。 注意,以上代码会无限循环输出当前时间,因此需要手动停止程序。如果需要在一定时间后自动停止程序,可以使用 `time.time()` 函数获取当前时间的时间戳,并设定一个终止时间戳,当时间戳超过终止时间戳时,自动停止程序。 ```python duration = 10 # 定时器持续时间(秒) start_time = time.time() # 记录程序开始时间 while time.time() - start_time < duration: print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) time.sleep(1) ``` 以上代码中,`duration` 变量表示定时器持续时间,`start_time` 变量记录程序开始时间。在循环体内部,先输出当前时间,然后暂停 1 秒,直到程序运行时间超过 `duration` 秒为止。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值