Почему isInterrupted() не меняет свое значение?

157
14 ноября 2018, 07:00

Решил проверить срабатывание isInterrupted() следующим кодом:

 public class Solution {
    public static volatile int countSeconds = 3;
    public static void main(String[] args) throws InterruptedException {
        RacingClock clock = new RacingClock();
        Thread.sleep(3500);
        System.out.println(clock.isInterrupted());
        clock.interrupt();
        System.out.println(clock.isInterrupted());
    }
    public static class RacingClock extends Thread {
        public RacingClock() {
            start();
        }
        public void run() {
        }
    }
}

И столкнулся с тем, что System.out.println(clock.isInterrupted()) после вызова clock.interrupt() выводит false. В чем может быть причина?

Answer 1

Потому, что поток который вы пытаетесь прервать уже завершился

public void interrupt()

Interrupting a thread that is not alive need not have any effect.

Прерывание потока, который уже завершился не имеет никакого эффекта

public boolean isInterrupted()

A thread interruption ignored because a thread was not alive at the time of the interrupt will be reflected by this method returning false.

Прерывание потока игнорируется, если поток был завершен к этому времени. Поэтому в этом случае метод возвращает false

READ ALSO
freemarker ошибка на странице

freemarker ошибка на странице

Все страницы отображаются нормально, только в одной отображается все кроме текста добавления который подтягивается с базы и отображения...

186
pool соединений(JDBC) с базой данных mySQL из GlassFish 4.1.2

pool соединений(JDBC) с базой данных mySQL из GlassFish 4.1.2

При ping-е соединения выходит ошибка:

156
2д отрисовка фигур

2д отрисовка фигур

Появляется лишь черный экранНикаких фигур

165