为了看看线程是否被中断,睡眠的目的是什么?

时间:2011-12-28 20:09:35

标签: java multithreading thread-sleep interrupted-exception

我遇到了一些Java代码,其中包含以下方法:

static boolean waitForSeconds(long seconds) {
    try {
        Thread.sleep(seconds * 1000);
    } catch (InterruptedException ex) {
        return false;
    }
    return true;
}

这可能是什么目的?返回值用于确定计算是否应该继续。我试着睡了1秒似乎很奇怪,唯一的目的是检查线程是否在那一秒间被中断。

调用此方法的代码是否尝试完成与thread.isInterrupted()相同的操作?无论它想做什么,有更好的方法吗?

对waitForSeconds的调用出现在另一个方法的顶部,而不是在循环内部,所以如果这个代码除了检查中断之外还打算等待一段时间,那么它似乎会检查在错误的地方。把睡眠放在靠近循环的地方不是更好吗?它更清楚它在做什么?

关于最后一个问题,请在此回复:

Is it clearer to sleep near a function call in a loop or in the function call itself?

4 个答案:

答案 0 :(得分:4)

目的是暂停。

检查调用外部方法的代码,试着看看他们想要暂停的原因 他们可能想要节省CPU或网络。

答案 1 :(得分:3)

该方法的目的是使线程执行停止指定的秒数。 catch子句允许该方法与调用者通信线程被中断,而不是时间段到期。

答案 2 :(得分:1)

这个想法可能是在计算中引入暂停,但是如果暂停被中断,那么这意味着计算不应该继续。如果不看周围(调用)代码,为什么需要暂停是不可能的。

答案 3 :(得分:0)

我猜他们想暂停至少x秒;如果由于某种原因线程无法长时间睡眠,他们将使用返回值再次调用该方法