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 秒发出一声哔哔声,持续一个小时。我如何让它永远每 10 分钟响一次。因为它应该永远每 10 分钟发出一次哔哔声(不仅仅是一个小时)

4

3 回答 3

3

您明确安排取消任务。如果您不想取消,则不要安排取消任务。

于 2012-07-25T09:12:20.527 回答
1

只需删除执行取消的第二个时间表。

于 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 中启动/停止/重新启动线程?
  • 在while循环中放置一个if语句,检查一个公共布尔isRunning,如果它是假的,continue;一次又一次地说重新检查,直到它再次为真,把你的哔哔声代码放在'true-block'中。
于 2012-07-25T09:12:56.297 回答