我如何让java在执行下一行之前等待一秒钟,而不使用try/catch [重复]
Posted
技术标签:
【中文标题】我如何让java在执行下一行之前等待一秒钟,而不使用try/catch [重复]【英文标题】:How do i have java wait a second before executing the next line, without try/catch [duplicate] 【发布时间】:2016-10-26 14:22:54 【问题描述】:我想知道是否有办法做到这一点,而不会造成任何混乱或混乱。
另外,当我执行wait()
方法时,它会出现java.lang.IllegalMonitorStateException
错误。
【问题讨论】:
wait
可能不符合您的预期。无论如何,你需要Thread.sleep()
。如果您不想弄乱那些 try-catch 的东西,只需将其放入实用程序方法中并命名为 saveSleep
或其他名称
你能找到运气吗here
在发布之前彻底搜索 Stack Overflow。
【参考方案1】:
Thread.sleep()
方法可以做你想做的事。这是一种简单的方法,可以在给定的时间内停止执行(并不总是准确的)。根据Oracle docs:
Thread.sleep 使当前线程暂停执行一段指定的时间。这是一种使处理器时间可用于应用程序的其他线程或可能在计算机系统上运行的其他应用程序的有效方法。
所以,调用它,使用,
Thread.sleep(1000);
这将休眠一秒钟,直到进一步执行。时间以毫秒或纳秒为单位。
由于操作系统及其配置的原因,此方法可能并不总是准确的。
【讨论】:
【参考方案2】:再一次,Guava 是你的朋友:
Uninterruptibles.sleepUninterruptibly(1,TimeUnit.SECONDS);
这就是它的实现方式:
public static void sleepUninterruptibly(long sleepFor, TimeUnit unit)
boolean interrupted = false;
try
long remainingNanos = unit.toNanos(sleepFor);
long end = System.nanoTime() + remainingNanos;
while (true)
try
// TimeUnit.sleep() treats negative timeouts just like zero.
NANOSECONDS.sleep(remainingNanos);
return;
catch (InterruptedException e)
interrupted = true;
remainingNanos = end - System.nanoTime();
finally
if (interrupted)
Thread.currentThread().interrupt();
br
【讨论】:
【参考方案3】:在 Java 中
Thread.sleep(intervalInMills);
TimeUnit.MILLISECONDS.sleep(intervalInMills);
定时器
new Timer().scheduleAtFixedRate(task, delay, period);
使用执行器框架
ScheduledExecutorService.scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
有了弹簧,
@Scheduled(fixedDelay = 1000)
private void method()
// some code
您还可以通过initialDelay
安排cron
或fixedRate
。
【讨论】:
【参考方案4】:没有线程和try/catch:
static void pause()
long Time0 = System.currentTimeMillis();
long Time1;
long runTime = 0;
while (runTime < 1000) // 1000 milliseconds or 1 second
Time1 = System.currentTimeMillis();
runTime = Time1 - Time0;
更新:
awilkinson 是对的,上面的方法是一个非常糟糕的 hack。顺便说一句,如果你只是想让一个准备使用的方法等待一秒钟或更长时间,即使它使用 try/catch,那么我会推荐这个:
public static void pause(double seconds)
try
Thread.sleep((long) (seconds * 1000));
catch (InterruptedException e)
【讨论】:
不应该使用这种方法,因为它会在整个等待时间内使用 CPU 周期不断地执行循环。以上是关于我如何让java在执行下一行之前等待一秒钟,而不使用try/catch [重复]的主要内容,如果未能解决你的问题,请参考以下文章
C# |控制台应用程序 |如何在执行下一行之前让程序等待(以毫秒为单位的时间)?