timer.cancel?java timer的cancel()调用后为什么没停止
大家好,如果您还对timer.cancel不太了解,没有关系,今天就由本站为大家分享timer.cancel的知识,包括java timer的cancel()调用后为什么没停止的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
java 定时器cancel之后要重启怎么解决
---------任务类,需要继承Task
publicclassMyTaskextendsTimerTask{
@Override
publicvoidrun(){
System.out.println("正在做任务");
}
}
--------示例类
publicclassMyDemo{
privateTimertimer=newTimer();
privateMyTaskmyTask=newMyTask();
publicvoiddoTask(inti){
if(i==1){
System.out.println("开始任务");
if(timer==null){
timer=newTimer();//新Timer
myTask=newMyTask();//新Task
}
timer.schedule(myTask,3000,1000);
}
if(i==0){
System.out.println("取消任务");
timer.cancel();
timer=null;//置空方便内存回收
myTask=null;//置空方便内存回收
}
}
publicstaticvoidmain(String[]args)throwsException{
MyDemomyDemo=newMyDemo();
Scannerscanner=newScanner(System.in);//输入1执行,0停止
while(true){
intparam=scanner.nextInt();
System.out.println("输入:"+param);
myDemo.doTask(param);
}
}
}
-----------
注:
1、网上找了好多方法,很多人说在timer.cancel()之后再newTimer()就好了,我试过还是不行。
2、其实还得再newTask(),让新的Timer服务于新的Task;
3、之前的Timer在cancel()之后不会再重启了,该方法不是暂停的原任务后继续执行原任务,
而是停止了原任务后去执行一个新任务。
缺点:容易出现线程问题,定时任务建议使用ScheduledExecutorService中的方法,或是使用@scheduled注解方式
为什么java中 timer 使用 cancel后再次对timer类赋值会报错
现在项目中用到需要定时去检查文件是否更新的功能。timer正好用于此处。
用法很简单,new一个timer,然后写一个timertask的子类即可。
package comz.autoupdatefile;
import java.util.Timer;
import java.util.TimerTask;
public class M{
public static void main(String[] args){
// TODO todo.generated by zoer
Timer timer= new Timer();
timer.schedule(new MyTask(), 1000, 2000);
}
}
class MyTask extends TimerTask{
@Override
public void run(){
System.out.println("dddd");
}
}
这样,就可以在1秒钟之后开始执行mytask,每两秒钟执行一次。
当然,timer的功能也可以通过自己构造线程,然后在线程中用sleep来模拟停止一段时间,然后再执行某个动作。
其实,看一下timertask的源码就立即可以知道,timertask就是实现了runnable接口的。也就是说,通过timer来间隔一段时间执行一个操作,也是通过一个线程来做到的。
java中TimerTask 如何才能停止呢
Timer类是用来执行任务的类,它接受一个TimerTask做参数
Timer.cancel();//使用这个方法退出任务
Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率.看个简单的例子:
import java.io.IOException;
import java.util.Timer;
public class TimerTest{
public static void main(String[] args){
Timer timer= new Timer();
timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.
while(true){//这个是用来停止此任务的,否则就一直循环执行此任务了
try{
int ch= System.in.read();
if(ch-'c'==0){
timer.cancel();//使用这个方法退出任务
}
} catch(IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
static class MyTask extends java.util.TimerTask{
@Override
public void run(){
// TODO Auto-generated method stub
System.out.println("________");
}
}
}
java timer的cancel()调用后为什么没停止
这个问题我也碰到了我建议还是用插旗法做逻辑控制就是说你的定时任务肯定是要执行你想要的逻辑代码当你调用取消以后你去把逻辑状态改变一下然后任务代码里先判断这个逻辑状态在去执行这样就算任务没有停止进入代码以后有个逻辑判断这样也不会执行你真正想要执行的代码了
如果你还想了解更多这方面的信息,记得收藏关注本站。