使用Thread.sleep(x)或wait()时出现异常

vin*_*low 340 java sleep

我试图延迟 - 或者让我睡觉 - 我的Java程序,但是发生了错误.

我无法使用Thread.sleep(x)wait().出现相同的错误消息:

未报告的异常java.lang.InterruptedException; 必须被抓住或宣布被抛出.

在使用Thread.sleep()wait()方法之前是否需要任何步骤?

Kon*_*rus 574

你面前有很多阅读.从编译器错误到异常处理,线程和线程中断.但这会做你想要的:

try {
    Thread.sleep(1000);                 //1000 milliseconds is one second.
} catch(InterruptedException ex) {
    Thread.currentThread().interrupt();
}
Run Code Online (Sandbox Code Playgroud)

  • 有些答案告诉我们什么都不做,有些人说扔掉,这告诉中断().有人会关心讨论哪个是合适的,为什么? (8认同)
  • @Suma有很多讨论,包括Stack Overflow本身.只是搜索它.评论太久了.几年后,我唯一的答案是:它取决于.通常理想的解决方案是终止线程正在做的任何事情(例如回滚此事务,打破循环等),但这非常依赖于上下文. (6认同)
  • 见亚伯的回复.Google for InterruptedException.长话短说:线程可以在睡眠时被中断,这是一种需要明确处理的异常. (4认同)

Ale*_*nov 195

正如其他用户所说,你应该用一个try{...} catch{...}区块围绕你的电话.但是自从Java 1.5发布以来,有一些TimeUnit类和Thread.sleep(millis)一样,但更方便.您可以选择睡眠操作的时间单位.

try {
    TimeUnit.NANOSECONDS.sleep(100);
    TimeUnit.MICROSECONDS.sleep(100);
    TimeUnit.MILLISECONDS.sleep(100);
    TimeUnit.SECONDS.sleep(100);
    TimeUnit.MINUTES.sleep(100);
    TimeUnit.HOURS.sleep(100);
    TimeUnit.DAYS.sleep(100);
} catch (InterruptedException e) {
    //Handle exception
}
Run Code Online (Sandbox Code Playgroud)

它还有其他方法: TimeUnit Oracle Documentation

  • 这个线程大约会睡105天;) (14认同)
  • 请参阅其他答案,例如如何使用所需的`try-catch`异常处理来包围这些调用. (6认同)
  • 别忘了"import java.util.concurrent.TimeUnit;" (2认同)

Abe*_*bel 29

看看这篇关于如何正确完成这篇文章的优秀简短文章.

基本上:赶上InterruptedException.请记住,您必须添加此catch块.该帖子进一步解释了这一点.


小智 13

使用以下编码结构来处理异常

try {
  Thread.sleep(1000);
} catch (InterruptedException ie) {
    //Handle exception
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*seK 8

把你Thread.sleep的尝试捕获块

try {
    //thread to sleep for the specified number of milliseconds
    Thread.sleep(100);
} catch ( java.lang.InterruptedException ie) {
    System.out.println(ie);
}
Run Code Online (Sandbox Code Playgroud)


Sin*_*Þór 7

当使用Android(我使用Java的唯一时间)时,我建议使用处理程序而不是让线程进入休眠状态.

final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Log.i(TAG, "I've waited for two hole seconds to show this!");

        }
    }, 2000);
Run Code Online (Sandbox Code Playgroud)

参考:http://developer.android.com/reference/android/os/Handler.html

  • 这适用于Android而非Core Java (4认同)