我知道这Thread.sleep(1000);
可以用来冻结当前线程(在示例中为 1 秒),但是由于您需要抛出一个Exception
我想知道使用它是否安全。我不想在程序中使用它并意外导致问题。
使用“可以”Thread.sleep();
还是有更好的方法来达到相同的结果?
我知道这Thread.sleep(1000);
可以用来冻结当前线程(在示例中为 1 秒),但是由于您需要抛出一个Exception
我想知道使用它是否安全。我不想在程序中使用它并意外导致问题。
使用“可以”Thread.sleep();
还是有更好的方法来达到相同的结果?
顺便说一句,如果你想睡觉并且知道你不会使用中断,避免处理 InterruptedExceptions 的一种方便方法是使用 Guava 的 Uninterruptibles,例如
Uninterruptibles.sleepUninterruptibly(1000, TimeUnit.MILLISECONDS);
如果以推荐的方式抛出异常(即重置中断状态),这将透明地处理 InterruptedException,并避免难看的 try-catch 块。
因为你需要抛出一个异常,所以我想知道使用它是否安全。
IllegalArgumentException
如果参数为负InterruptedException
如果线程被中断=> 如果您传递一个正数并且线程没有被中断,则不会有例外。
除非你theThread.interrupt()
从另一个线程调用你会没事的。
编辑
您似乎想创建一个计时器 - 在这种情况下,您可以通过使用内置机制让您的生活变得更加简单:
Runnable r = new Runnable() {
public void run() { runYourTaskHere(); }
};
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(r, 0, 1, TimeUnit.SECONDS);
取决于您要做什么,我见过Thread.sleep
使用它并且通常用于修复编程错误,因为人们认为它可以解决竞争条件。 Thread.sleep
必须抛出异常,因为 Java 不控制 CPU(我上次检查过),所以如果 CPU 有错误,或者即使它没有并提前唤醒线程/以某种方式中断它,程序(Java)需要一种方法来终止自身并将消息向上传播到堆栈。此外,这在很大程度上取决于您所说的“相同结果”是什么意思
这是完全安全的。JVM提供了InterruptedException,以便您可以在需要时处理它(假设您想在该线程被中断时做一些额外的事情)......这实际上并不意味着发生了不好的事情。
由于thread.sleep
暂停当前线程指定时间(而不是杀死它)。所以使用它是安全的。