java темы уведомляют

У меня есть 2 класса, например, Class1 и Class2

скажем, я делаю это в Class1:

Class2 class2 = new Class2();
Thread thread = new Thread(class2);
thread.start();
...
thread.stop();

теперь я хочу проверить в методе выполнения Class2, когда мой поток останавливается, как я могу это сделать? Поэтому, когда class1 останавливает поток, я хочу получить предупреждение для class2, что он остановился, а затем сделать некоторые вещи

4 ответа

  1. Не использовать stop()использовать interrupt(),

  2. Если вы подчиняетесь пункту 1, в Class2 ты можешь использовать:


public void run() {
  if(Thread.currentThread().isInterrupted())
    //somebody interrupted me, ouch!
}

Прежде всего, не используйте thread.stop(), поскольку он устарел. Следовательно, в зависимости от таких методов не рекомендуется. Второе: существует несколько способов ее решения, то есть, в основном, попытка выключения или связи.

  1. Используйте флаг, который уведомляет ваше сообщение. Но убедитесь, что весь вызов является потокобезопасным. И своевременно держать флажок был установлен или нет. Если установлено, сделайте желаемое действие.
  2. Прерывания являются отличным способом уведомления другого потока. Политика обслуживания и прерывания гласит: что когда-либо прерывание генерируется в потоке 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()

Из интереса, что вы пытаетесь достичь?

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