Timer和TimerTask 调用与取消

当任务被执行,与被取消 同一时间调用,怎么才知取消成功没?

先上个例子:


package Timer;
import java.sql.Time;
import java.util.Timer;
import java.util.TimerTask;


/***
 * 测试任务调度与取消
 * 
 * @author Administrator
 * 
 */
public class Mytimer {


Timer timer = new Timer("aa");
MyTask mytask = new MyTask();


public boolean cancelMytask() {
timer.cancel();
return mytask.cancel();

}


public void scheduleTask() {
try {
timer.schedule(mytask, 3000);
} catch (Exception e) {
e.getStackTrace();
}

}

}





package Timer;


import java.util.Date;
import java.util.TimerTask;


public class MyTask extends TimerTask {


@Override
public void run() {


System.out.println("我正在执行中任务............"+new Date().toLocaleString());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("已经执行完任务了!"+new Date().toLocaleString());
}
}



package Timer;


import java.util.Date;
import java.util.Timer;


public class Worker implements Runnable {


private String name;


private Mytimer timer;


public Worker(String name, Mytimer timer) {
this.name = name;
this.timer = timer;
}


@Override
public void run() {
System.out.println("我是:" + name);
try {
timer.scheduleTask();
} catch (Exception e) {
System.out.println("任務被非正常取消"+new Date().toGMTString());
}
}


};


package Timer;


import java.util.Date;
import java.util.Timer;


public class Worker2 implements Runnable {


private String name;


private Mytimer timer;


public Worker2(String name, Mytimer timer) {
this.name = name;
this.timer = timer;
}


@Override
public void run() {
System.out.println("我是:" + name);
   try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
boolean flag=timer.cancelMytask();
System.out.println( name+"取消了任务" +(flag?"成功":"失敗" )+new Date().toLocaleString());
}


};



package Timer;


import java.util.Timer;


public class MainTest {
public static void main(String args[]) {

Mytimer timer = new Mytimer();


new Thread(new Worker("小明", timer)).start();


new Thread(new Worker2("小新", timer)).start();


}
}




Mytimer  类中,Timer 与TimerTask  的cancel的区别是:

TimerTask   的cancel 是有返回值的而,TimerTask  的cancel 是释放当前的任务,无论成功与否

Timer 不取消的话,线程会一直挂在那。所以上面两个都调用了.

文中都是三秒后worker 和Worker2同时执行和取消任务,

那么哪个会调用成功?得看jvm了


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值