Timer和TimerTask 调用与取消
来源:互联网 发布:ntfs.sys windows 10 编辑:程序博客网 时间:2024/06/06 07:06
当任务被执行,与被取消 同一时间调用,怎么才知取消成功没?
先上个例子:
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了
- Timer和TimerTask 调用与取消
- Timer和TimerTask与线程的关系
- Timer和TimerTask与线程的关系
- Timer与TimerTask入门
- Timer与TimerTask入门
- Timer与TimerTask
- Timer 与 TimerTask 类
- Timer与TimerTask详解
- Timer与TimerTask入门
- timerTask与Timer
- Timer与TimerTask
- Timer 与 TimerTask
- Timer与TimerTask
- Timer与TimerTask相关
- Timer与TimerTask
- Timer/TimerTask与ScheduledExecutorService
- Timer与TimerTask
- Timer和TimerTask详解
- vim复制、粘贴以及配置总结
- xxx定律
- 百万富翁问题
- 素数判定
- 一个毕业6年的程序员工作经历和成长感悟(下)
- Timer和TimerTask 调用与取消
- CheckBox的用法
- RegularExpressionValidator控件验证
- UITabBarController使用 .
- cocos2d-x中的单例模式运用
- 激活time job feature
- 最长公共子序列问题
- idhttp断点下载
- 你刚才在淘宝上买了一件东西【技术普及贴】