Какова может быть цель сна, чтобы просто посмотреть, не прервется ли поток?

Я наткнулся на некоторый код Java, в котором есть метод, содержащий следующее:

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

Какова может быть цель этого? Возвращаемое значение используется, чтобы определить, следует ли продолжать вычисления. Мне кажется странным пытаться заснуть на 1 секунду с единственной целью проверить, был ли поток прерван в течение этой секунды.

Пытается ли код, вызывающий этот метод, выполнить то же самое, что и thread.isInterrupted()? Что бы он ни пытался сделать, есть ли лучший способ?

Вызов waitForSeconds появляется в начале другого метода, а не внутри цикла, поэтому, если этот код действительно намерен ждать секунду для какой-либо цели в дополнение к проверке прерывания, кажется, что он будет проверять неправильный место. Не лучше ли поставить сон рядом с петлей, где понятнее, что он делает?

На последний вопрос, пожалуйста, ответьте здесь:

Чем лучше спать рядом с вызовом функции в цикле или в самом вызове функции?


person Anonymous    schedule 28.12.2011    source источник


Ответы (4)


Цель - сделать паузу.

Проверьте код, вызывающий внешний метод, чтобы понять, почему они хотят приостановить работу.
Возможно, они хотят сэкономить ресурсы ЦП или сети.

person SLaks    schedule 28.12.2011

Цель метода — остановить выполнение потока на указанное количество секунд. Предложение catch позволяет методу сообщить вызывающей стороне, что поток был прерван, а не истекает период времени.

person Mike Partridge    schedule 28.12.2011

Идея, вероятно, состоит в том, чтобы ввести паузу в вычислениях, но если пауза прерывается, то это означает, что вычисления не должны продолжаться. Зачем нужна пауза, невозможно сказать, не видя окружающий (вызывающий) код.

person Roger Lindsjö    schedule 28.12.2011

Я предполагаю, что они хотят сделать паузу как минимум на x секунд; если по какой-то причине поток не мог спать так долго, он использовал бы возвращаемое значение для повторного вызова метода.

person Slash    schedule 28.12.2011