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