package test.util; import java.io.IOException; import java.util.Timer; import test.MyTask; /* * 本类给出了使用Timer和TimerTaske的主要方法,其中包括定制任务,添加任务 * 退出任务,退出定时器. * 因为TimerTask的status域是包级可访问的,所以没有办法在java.util.包外 * 得到其状态,这对编程造成一些不便 .我们不能判断某个Task的状态了. * */ public class TimerTest { public static void main(String[] args) { Timer timer = new Timer(); MyTask myTask1 = new MyTask(); MyTask myTask2 = new MyTask(); myTask2.setInfo("myTask-2"); timer.schedule(myTask1, 1000, 2000); timer.scheduleAtFixedRate(myTask2, 2000, 3000); while (true) { try { byte[] info = new byte[1024]; int len = System.in.read(info); // 通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。 String strInfo = new String(info, 0, len, "GBK");//从控制台读出信息 if (strInfo.charAt(strInfo.length() - 1) == ' ') { strInfo = strInfo.substring(0, strInfo.length() - 2); // System.out.println(strInfo+"1"); } if (strInfo.startsWith("Cancel-1")) { myTask1.cancel();//退出单个任务 // 其实应该在这里判断myTask2是否也退出了,是的话就应该break.但是因为无法在包外得到 // myTask2的状态,所以,这里不能做出是否退出循环的判断. } else if (strInfo.startsWith("Cancel-2")) { myTask2.cancel(); } else if (strInfo.startsWith("Cancel-All")) { timer.cancel();//退出Timer break; } else { // 只对myTask1作出判断,偷个懒^_^ myTask1.setInfo(strInfo); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } static class MyTask extends java.util.TimerTask { String info = "^_^"; @Override public void run() { // TODO Auto-generated method stub System.out.println(info); } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } } }

fanxiaolin84 LV10
2019年12月27日
猴哥猴哥 LV12
2019年3月26日
dscing LV8
2018年7月27日
1324488732 LV27
2018年6月29日
xxxud200 LV1
2017年6月20日
李金元 LV2
2017年4月25日
Mastar LV1
2017年3月31日
wuwoyiran LV3
2017年2月15日
gann2015 LV25
2016年11月21日
twyx0621 LV1
2016年9月26日

somexi
2024年8月23日
暂无贡献等级
3334004690 LV10
2023年11月1日
BestClever LV32
2022年4月27日
G2andIG LV5
2022年1月17日
gaojian0612 LV2
2021年11月23日
lvbs977 LV2
2021年3月26日
麻辣小龙虾 LV11
2020年12月2日
1358849392 LV21
2020年10月28日
世界那么大 LV7
2020年6月17日
152162355 LV3
2020年5月25日