3 回答

TA貢獻1829條經驗 獲得超4個贊
我會用一個java.util.Timer; 創(chuàng)建一個匿名對象TimerTask以在 5 秒內顯示Date6 次,然后顯示cancel()其本身。這可能看起來像
java.util.Timer t = new java.util.Timer();
java.util.TimerTask task = new java.util.TimerTask() {
private int count = 0;
@Override
public void run() {
if (count < 6) {
System.out.println(new Date());
} else {
t.cancel();
}
count++;
}
};
t.schedule(task, 0, TimeUnit.SECONDS.toMillis(5));

TA貢獻1863條經驗 獲得超2個贊
無限循環(huán)while(true)給你帶來了麻煩。
你不需要一個 do-while 循環(huán),除非它是一個特定的要求。
public static void main(String[] args) throws InterruptedException {
long startTime = System.currentTimeMillis();
long duration = (30 * 1000);
while ((System.currentTimeMillis() - startTime) < duration) {
System.out.println(" Date: " + new Date());
Thread.sleep(5000);
}
}
對于 do-while 循環(huán),您可以重構如下:
public static void main(String[] args) throws InterruptedException {
long startTime = System.currentTimeMillis();
long duration = (30 * 1000);
do {
System.out.println(" Date: " + new Date());
Thread.sleep(5000);
} while ((System.currentTimeMillis() - startTime) < duration);
}

TA貢獻1890條經驗 獲得超9個贊
其他答案演示了使用while循環(huán)和Timer; 這是您可以使用的方法ScheduledExecutorService:
private final static int PERIOD = 5;
private final static int TOTAL = 30;
...
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(() -> {
System.out.println(new LocalDate());
}, PERIOD, PERIOD, TimeUnit.SECONDS);
executor.schedule(executor::shutdownNow, TOTAL, TimeUnit.SECONDS);
添加回答
舉報