我想让一个程序每五秒钟就运行一次  而不管它在这五秒钟内是否运行完一次timer里的schedule(TimerTask task, 0, 5000) 方法  会一直等待一次执行完毕后才会继续等待5秒钟进行下一次执行scheduleAtFixedRate(TimerTask task, 0,5000) 只会尽量的保证一个速率  也是等到一次执行完毕后 才能执行下一次问问各位大神们有没有办法  就是不管他当前本次有没有执行完 5秒一过就立即执行下一次  再5秒又立即一次呢

解决方案 »

  1.   

    将要运行程序制作成线程,使用一timer,每5s启动一个线程。
      

  2.   

    TimerTask 使用Timer 不准确 
    建议用quartz.
      

  3.   


    表示木有听说过  quartz是神马?不要用你头像的句子回复我幺
      

  4.   

    一个TimeTask是用一个线程的。任务没法强制终止的。就算TimerTask的cancel也会等当前正在执行的任务执行完后永不执行。
      

  5.   

    直接用线程来操作。(new Thread(new Runnable(){
    public void run(){
    while(1>0){
    //延时的方法有两种,这是第一种。
    try{Thread.sleep(5000);}catch(Exception e){}
    //这里写要执行的任务
    }
    }
    })).start();
      

  6.   

    如果仔细看API的话。你这个应该完不成的。schedule()只能尽量的保证时间间隔。有一种情况是这样的,假设任务n的开始执行时间是t(n)那么n+1个任务的理想执行时间是t(n+1)但是第n个任务超时了。在第x时间才执行完,如果x>t(n+1)那么n+1个任务会立即执行而t(n+2) = x + 时间间隔。
    而且楼上说的Timer每5秒启动一个线程。纯属扯淡。每个Timer对象,在后台都对应一个线程用来执行TimeTask.
      

  7.   

    用多线程是完全可以的  Timer定时起一个线程完全是可以的,
      

  8.   

    谢谢诸位的回答  问题我已经解决了  综合2楼8楼和10楼   我是这么做的   就是在timertask的run方法中另起一个线程  这个线程负责我的业务代码。也就是把8楼的代码部分  放进timertask中  不过不用sleep了另外  9楼应该是理解片面了  解决这个问题的方法的确是使用timer每5秒启动一个线程。不过这个线程是单独新创建的Thread  不是timer线程  代码如下   外部调用下面的initTimer方法private static void initTimer(final String aa, final String bb,final Object[] object) {
     Timer timer = new Timer();   
     timer.schedule(new TimerTask(){
       @Override
     public void run() {
       //每个方法均由一个线程去调度
     new ThreadForEveryMothed(aa,bb,,object).start();//这是单独起的线程,具体                       任务封装在里面   
    }    }, 0, 5000);   
    }
    }
      

  9.   


    你可拉倒吧,你自己看看API。是因为你这问题简单,你才没出错的。自己好好看看API
      

  10.   

    我想让一个程序每五秒钟就运行一次 而不管它在这五秒钟内是否运行完一次你不就是想要这个要求吗?你自己另起一个线程完全浪费资源。每五秒就起一个线程。直接用Timer自己对应一个后台线程来维护就行。但是Timer有局限性,就是上面我说的。而且,你这种方法解决不了Timer的局限性。摆脱你好好看看,如果超时人家Timer会怎么处理
      

  11.   

    你这样做,你自己觉得。每次起一个新的线程,用的时间超不过5S中。所以好像是避免了Timer的局限性。但是你想没想,每5S起一个线程。会导致你的任务队列上有好多线程。这样线程调度的影响,如果你还是不能保证每5秒就执行那个方法。跟本原因就是,如果你那个方法时间过长,就不行。