在 java 中模拟倒计时最有效的方法是什么?
What is the most efficient way to simulate a countdown in java?
我想每秒打印到控制台。到目前为止,我已经想到了两种方法。
long start_time = System.currentTimeMillis();
while(true){
if ((System.currentTimeMillis() - start_time) >= 1000) {
System.out.println("One second passed");
start_time = System.currentTimeMillis();
}
}
还有这个
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("One second passed");
}
有没有比另一种方法更安全、更可靠或更有效的方法?
或者每个都有用例?
谢谢
这并不像看起来那么简单。
你的解决方案的问题是第一个非常低效,第二个容易漂移,因为 sleep(1000)
不能保证正好休眠 1 秒。 (javadoc 说 sleep(1000)
睡眠 至少 一秒钟。)
一种可能性是使用 ScheduledExecutorService.scheduleWithFixedDelay
并通过查看毫秒时钟与您的开始时间(或结束时间)之间的差异来计算每次延迟。这将使您的消息与实时同步(或多或少)。
或者您可以使用 scheduleAtFixedRate
简化它,因为看起来 ScheduledThreadPoolExecutor
会解决时钟同步问题。
另一种可能性是在 Java.
中寻找实现“cron-like”调度程序的第 3 方库
我想每秒打印到控制台。到目前为止,我已经想到了两种方法。
long start_time = System.currentTimeMillis();
while(true){
if ((System.currentTimeMillis() - start_time) >= 1000) {
System.out.println("One second passed");
start_time = System.currentTimeMillis();
}
}
还有这个
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("One second passed");
}
有没有比另一种方法更安全、更可靠或更有效的方法? 或者每个都有用例? 谢谢
这并不像看起来那么简单。
你的解决方案的问题是第一个非常低效,第二个容易漂移,因为 sleep(1000)
不能保证正好休眠 1 秒。 (javadoc 说 sleep(1000)
睡眠 至少 一秒钟。)
一种可能性是使用 ScheduledExecutorService.scheduleWithFixedDelay
并通过查看毫秒时钟与您的开始时间(或结束时间)之间的差异来计算每次延迟。这将使您的消息与实时同步(或多或少)。
或者您可以使用 scheduleAtFixedRate
简化它,因为看起来 ScheduledThreadPoolExecutor
会解决时钟同步问题。
另一种可能性是在 Java.
中寻找实现“cron-like”调度程序的第 3 方库