Что может быть целью сна для того, чтобы увидеть, прерывается ли поток? - PullRequest
4 голосов
/ 29 декабря 2011

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

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

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

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

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

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

Это так?яснее спать возле вызова функции в цикле или в самом вызове функции?

Ответы [ 4 ]

4 голосов
/ 29 декабря 2011

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

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

3 голосов
/ 29 декабря 2011

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

1 голос
/ 29 декабря 2011

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

0 голосов
/ 29 декабря 2011

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

...