java timer 取消_Java Timer取消

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

importjava.util.Timer;importjava.util.TimerTask;class Task extendsTimerTask{

@Overridepublic voidrun() {

System.out.println("******程序执行******");

}

}public classTaskTest {public static voidmain(String[] args){

Timer timer= newTimer();

Task task= newTask() ;

timer.schedule(task,3000); //这里的单位是毫秒

}

}

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

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

importjava.util.Timer;importjava.util.TimerTask;class Task extendsTimerTask{

@Overridepublic voidrun() {

System.out.println("******程序执行******");

System.gc();

}

}public classTaskTest {public static voidmain(String[] args){

Timer timer= newTimer();

Task task= newTask() ;

timer.schedule(task,3000); //这里的单位是毫秒

}

}

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

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

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

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

public voidcancel()

Terminatesthis timer(终结这个timer), discarding any currently scheduled tasks(抛弃所有当前正在执行的TimerTask). Does not interfere with a currently executing task (ifit exists). Once a timer has been terminated, its execution thread terminates gracefully, and no more tasks may be scheduled on it.

Note that callingthis 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 thistimer.

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

那么我们来实现一下:

importjava.util.Timer;importjava.util.TimerTask;public classTaskTest {public static voidmain(String[] args) {

Timer timer= newTimer();//三秒后开始执行,每隔一秒执行一次

timer.schedule(new Task(timer), 3 * 1000, 1000);

}

}class Task extendsTimerTask {privateTimer timer;publicTask(Timer timer) {this.timer =timer;

}int i = 1;

@Overridepublic voidrun() {

System.out.println("******程序执行******");//当执行到第5秒,程序结束

if (i++ == 5) {this.timer.cancel();

System.out.println("#### 程序结束 ####");

}

}

}

OK,成功结束程序。

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值