1

次のコードを60秒間だけ実行する必要があります

コードは2秒間遅延して完全に機能し、5秒ごとに繰り返されます。

しかし、ここではこれをすべて60秒間だけ行う必要があります

        int delay = 3000; // delay for 3 sec. 
        int period = 5000; // repeat every 5 sec. 
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                System.out.println("Would it run?"+System.currentTimeMillis());
            }
        }, delay, period);

これを行う方法を教えてください。

4

6 に答える 6

7

あなたは簡単にそれを行うことができますScheduledExecutorService

  • タスクをスケジュールする
  • を取得しますScheduledFuture
  • 60秒後にその未来をキャンセルします:
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

final Runnable task = new Runnable() {
    public void run() {
        System.out.println("Would it run?"+System.currentTimeMillis());
    }
};
final ScheduledFuture<?> handle =
        scheduler.scheduleAtFixedRate(task, 2, 5, TimeUnit.SECONDS);
scheduler.schedule(new Runnable() {
    public void run() { handle.cancel(true); }
}, 60, SECONDS);
于 2013-02-07T09:17:45.580 に答える
1
public class test{
static int delay = 3000; // delay for 3 sec. 
       static int period = 5000; // repeat every 5 sec. 
        static int totaltime = 0;   
public static void main(String ar[]){


        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                test.totaltime+= ((test.delay+test.period)/1000);

                if(test.totaltime > 60)System.exit(0);
                System.out.println("Would it run?"+System.currentTimeMillis());

            }
        }, test.delay, test.period);
}
    }
于 2013-02-07T09:11:06.463 に答える
1

あなたはそれをしている蜂の回数を数え、それからキャンセルする必要があります:

import java.util.Timer;
import java.util.TimerTask;


public class Waiting {
    public static int times;

    public static void main(String[] args)
    {
        int delay = 3000;  // delay for 3 sec. 
        int period = 5000; // repeat every 5 sec. 
        times = 60000 / ( delay + period );


        Timer timer = new Timer();
        timer.scheduleAtFixedRate( new TimerTask() {

            public void run() {
                System.out.println( "Times remaining: " + Waiting.times );

                --Waiting.times;
                if ( Waiting.times == 0 ) {
                    this.cancel();
                    System.exit( 0 );
                }
            }
        }, delay, period); 
    }
}

お役に立てれば。

于 2013-02-07T09:16:17.347 に答える
0

60になるタイマーを設定し、次のようなifを設定できます。

int time = 3;

 timer.scheduleAtFixedRate(new TimerTask() {

            public void run() {
     if(time<60){
                System.out.println("Would it run?"+System.currentTimeMillis());
                time = time + 5;
     }
     else{ timer.stop(); }
            }
        }, delay, period);
于 2013-02-07T09:12:26.540 に答える
0

必要な回数だけ繰り返した後cancel、メソッドから呼び出すだけです。run

于 2013-02-07T09:12:29.130 に答える
0

正直なところ、私はタイマーを使用したことはありませんが、タスクを一定期間実行したい場合は、なぜ使用しないでくださいpublic void schedule(TimerTask task,long delay, long period)

私が正しく理解していなければ、今すぐタスクを60秒間実行したいので、次のようにします。

timer.schedule(myTask,0,60000);

あなたのためにすべきですが、私が言ったように、私はタイマーを使って仕事をすることは決してないので、100%それがうまくいくかどうかはわかりません

于 2013-02-07T10:02:25.867 に答える