java темы уведомляют
У меня есть 2 класса, например, Class1 и Class2
скажем, я делаю это в Class1:
Class2 class2 = new Class2();
Thread thread = new Thread(class2);
thread.start();
...
thread.stop();
теперь я хочу проверить в методе выполнения Class2, когда мой поток останавливается, как я могу это сделать? Поэтому, когда class1 останавливает поток, я хочу получить предупреждение для class2, что он остановился, а затем сделать некоторые вещи
4 ответа
Не использовать
stop()
использоватьinterrupt()
,Если вы подчиняетесь пункту 1, в
Class2
ты можешь использовать:
public void run() {
if(Thread.currentThread().isInterrupted())
//somebody interrupted me, ouch!
}
Прежде всего, не используйте thread.stop(), поскольку он устарел. Следовательно, в зависимости от таких методов не рекомендуется. Второе: существует несколько способов ее решения, то есть, в основном, попытка выключения или связи.
- Используйте флаг, который уведомляет ваше сообщение. Но убедитесь, что весь вызов является потокобезопасным. И своевременно держать флажок был установлен или нет. Если установлено, сделайте желаемое действие.
- Прерывания являются отличным способом уведомления другого потока. Политика обслуживания и прерывания гласит: что когда-либо прерывание генерируется в потоке A, а политика прерывания A должна завершаться. т.е. всякий раз, когда он получает прерывание. Сделайте работоспособным в A так, чтобы он своевременно проверял прерывание, и если оно установлено, закройте службу. Проверьте статус по
Thread.currentThread().isInterrupted()
Обычно прерывания в основном используются для уведомления других о том, что он запрашивает отключение. (У Брайана Гетца "Параллелизм на практике" есть отличная глава).
Если поток "остановился", это означает, что run
метод Class2
вышел. Поэтому нет способа иметь код в run
метод, который выполняет after
поток остановился
Вы можете прослушивать прерывание и обрабатывать его, но эта обработка будет выполняться, пока поток еще работает.
Вы также можете использовать другой метод в Class2
с которого вы могли бы позвонить Class1
как только поток остановился.
Ваш class2 должен получить InterruptedException и все. КСТАТИ http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html()
Из интереса, что вы пытаетесь достичь?