Как я могу узнать, был ли демон остановлен из другого потока?

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

3 ответа

class Daemon extends Thread()
{
  private boolean started;
  public void Daemon() {
    started = false;
  }
  public void run() {
    started = true;
    // rest of your code.
  }

  public boolean isStoped() {
    return started && !isAlive();
  }
}

использование isStoped() знать, когда ваша нить была остановлена. isAlive() одного недостаточно, потому что поток, который не был запущен, вернется false,

Как и любой другой поток, вы должны получить экземпляр потока и затем вызвать:

thread.isAlive()

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

Если вы не знаете, является ли поток демоном или нет, используйте isDaemon,

isDaemon

открытый финальный логический isDaemon()

Проверяет, является ли этот поток потоком демона.

Возвращает: true, если этот поток является потоком демона; ложь в противном случае.

Затем вы можете узнать у Нити текущий статус, позвонив:

Thread.State ts = thread.getState();

и вы должны получить один из следующих:

Состояние потока. Поток может находиться в одном из следующих состояний:

  • NEW Поток, который еще не запущен, находится в этом состоянии.

  • RUNNABLE Поток, выполняющийся на виртуальной машине Java, находится в этом состоянии.

  • BLOCKED Поток, который заблокирован в ожидании блокировки монитора, находится в этом состоянии.

  • WAITING Поток, который неопределенно долго ожидает, пока другой поток выполнит определенное действие, находится в этом состоянии.

  • TIMED_WAITING Поток, который ожидает, пока другой поток выполнит действие до указанного времени ожидания, находится в этом состоянии.

  • TERMINATED Поток, который вышел, находится в этом состоянии.

Ссылка: http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

Другие вопросы по тегам