import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimer{ public static void main(String[] args) {
TimerTask timerTask = new TimerTask() {

@Override
public void run() {
int count = 1000000; //要下发的短信数据
for(int i=0; i<count;){
System.out.println(++i);
}
}
};
Timer timer = new Timer();
System.out.println("------------定时器启动--------------------");
timer.schedule(timerTask,new Date());
//要在下面一行代码设置一个断点,不然, run 方法还没开始执行,就已经关闭了
System.out.println("------------定时器关闭--------------------");
timerTask.cancel(); //测试证明:能关闭此定时器,但不能立即中止定时器中 run 方法的 for 循环,timer.cancel() 的效果也是一样
System.out.println("------------END--------------------");
}
}

解决方案 »

  1.   

    在for里面查询某个状态量即可。如果状态量OK了,就break。
      

  2.   


    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;/**
     * 在网上找到了以下方法,可以立即中止 run 方法中正在运行的 for循环,不知道是否会产生次生问题
     * 来源:http://mgc.name/article.asp?id=234
     * @author Vickey
     *
     */
    public class MyTimer{ public static void main(String[] args) {
    TimerTask timerTask = new TimerTask() {
    private boolean goOn = true;
    @Override
    public void run() {
    int count = 1000000; //要下发的短信数据
    for(int i=0; i<count;){
    if (!this.goOn) { //继续还是立即中止
    break;
    }
    System.out.println(++i);
    }
    }
    //重写了 cancel 方法
    @Override
    public boolean cancel() {
    super.cancel();
    return this.goOn = false;
    }
    };
    Timer timer = new Timer();
    System.out.println("------------定时器启动--------------------");
    timer.schedule(timerTask,new Date());
    //要在下面一行代码设置一个断点,不然, run 方法还没开始执行,就已经关闭了
    System.out.println("------------定时器关闭--------------------");
    timerTask.cancel();
    System.out.println("------------END--------------------");
    }
    }
      

  3.   

    停止定时器 ,再加个break 就行了,见代码:import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
    public class MyTimer{
    public static void main(String[] args) {
    timer.schedule(new SendMsgTask(),1000,1000);
    }
    public static void stopTimer(){
    System.out.println("停止任务...");
    timer.cancel();

    }
    private final static Timer timer = new Timer();
    }
    class SendMsgTask extends TimerTask {
    public void run() {
    int count = 1000; //要下发的短信数据
    for(int i=0; i<count;i++){
    if(i==50){
    MyTimer.stopTimer();//停止计时器
    break;
    }
    System.out.println("发送短信:"+i);
    }
    }
    };
      

  4.   

    [Quote=引用 3 楼 kaoh1631 的回复:]
    停止定时器 ,再加个break 就行了,见代码:谢了,参考下