0
class BeeperControl {
    private final static ScheduledExecutorService scheduler = 
                                  Executors.newScheduledThreadPool(1);

    public static void main(String[] args){
        beepForAnHour();
    }

    public static void beepForAnHour() {
        final Runnable beeper = new Runnable() {
            public void run() {
                System.out.println(“beep”);
            }
        };
        final ScheduledFuture beeperHandle = 
             scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);

        scheduler.schedule(new Runnable() {
            public void run() {
                beeperHandle.cancel(true);
            }
        }, 60 * 60, SECONDS);
    }
}

このコードは、10秒ごとに1時間ビープ音を鳴らします。永遠に10分ごとにビープ音を鳴らすにはどうすればよいですか。のように、10分ごとに永遠にビープ音を鳴らし続ける必要があります(1時間だけではありません)

4

3 に答える 3

3

キャンセル タスクを明示的にスケジュールします。キャンセルしたくない場合は、キャンセル タスクをスケジュールしないでください。

于 2012-07-25T09:12:20.527 に答える
1

キャンセルを行う 2 番目のスケジュールを削除するだけです。

于 2012-07-25T09:12:28.737 に答える
0

私が提案する:

public void run() {
    while(true) {
        System.out.println(“beep”);
        Thread.sleep(10000);
    }
}

+;

  • よりシンプルに
  • 中断されているかどうかを追跡できます

-'s: - InterruptedException をキャッチする必要があります

停止したい場合:

  • catchステートメントで停止/一時停止するコードを配置し、停止すると言いmyThread.interrupt();ます。もう一度開始するのは少し難しいです。最良のオプションは、新しいスレッドを作成することです(まったく同じことを行います)。ここに情報: Java でスレッドを開始/停止/再起動する方法は?
  • if ステートメントを while ループに入れ、パブリック ブール値 isRunning をチェックします。false の場合continue;は、true になるまで何度も再チェックを繰り返し、ビープ コードを「true ブロック」に入れます。
于 2012-07-25T09:12:56.297 に答える