JAVA TIMER简单用法学习以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Timer有两种执行任务的模式 最常用的是schedule 它可以以两种方式执行任务: :在某个时间(Data) :在某个固定的时间之后(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() );//在 秒后执行此任务 每次间隔 秒 如果传递一个Data参数 就可以在某个固定的时间执行这个任务 while(true){//这个是用来停止此任务的 否则就一直循环执行此任务了 try { int ch = System in read(); if(ch c == ){ 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("________"); } } }
如果你使用的是JDK + 还有一个scheduleAtFixedRate模 式可以用 在这个模式下 Timer会尽量的让任务在一个固定的频率下运行 举例说明:在上面的例子中 我们想让MyTask在 秒钟后 每两秒钟执行一 次 但是因为java不是实时的(其实java实时性很差 ) 所以 我们在上个程序中表达的原义并不能够严格执行 如果我们调用的是 scheduleAtFixedRate 那么 Timer会尽量让你的Task执行的频率保持在 秒一次 运行上面的程序 假设使用的是 scheduleAtFixedRate 那么下面的场景就是可能的: 秒钟后 MyTask 执行一次 因为系统繁忙 之后的 秒后MyTask 才得以执行第二次 然后 Timer记下了这个延迟 并尝试在下一个任务的时候弥补这个延迟 那么 秒后 MyTask 将执行的三次 "以固定的频率而不是固定的延迟时间去执行一个任务"
下面给出一个复杂点的例子 其中告诉大家怎么退出单个TimerTask 怎么退出所有Task复制代码 代码如下: package MyTimerTest;
import java io IOException; import java util Timer; /* * 本类给出了使用Timer和TimerTaske的主要方法 其中包括定制任务 添加任务 * 退出任务 退出定时器 * 因为TimerTask的status域是包级可访问的 所以没有办法在java util 包外 * 得到其状态 这对编程造成一些不便 我们不能判断某个Task的状态了 * */
public class TimerTest {
public static void main(String[] args) { Timer timer = new Timer(); MyTask myTask = new MyTask(); MyTask myTask = new MyTask(); myTask setInfo("myTask "); timer schedule(myTask ); timer scheduleAtFixedRate(myTask ); while (true) { try {
byte[] info = new byte[ ]; int len = System in read(info); String strInfo = new String(info len "GBK");//从控制台读出信息 if (strInfo charAt(strInfo length() ) == ) { strInfo = strInfo substring( strInfo length() ); } if (strInfo startsWith("Cancel ")) { myTask cancel();//退出单个任务 // 其实应该在这里判断myTask 是否也退出了 是的话就应该break 但是因为无法在包外得到 // myTask 的状态 所以 这里不能做出是否退出循环的判断 } else if (strInfo startsWith("Cancel ")) { myTask cancel(); } else if (strInfo startsWith("Cancel All")) { timer cancel();//退出Timer break; } else { // 只对myTask 作出判断 偷个懒^_^ myTask 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; } lishixinzhi/Article/program/Java/JSP/201311/20359
分页:123