Поток застрял в Thread.join (), даже если другой поток прерван - PullRequest
3 голосов
/ 01 марта 2011

Наше Java-приложение запускает рабочий поток (используя Thread.start()).Вскоре после этого он вызывает Thread.join() в рабочем потоке.Рабочий поток делает некоторые вещи и завершается.Первый поток завершает вызов join() и продолжает свой веселый путь.Стандартный материал:

Thread t = new WorkerThread();
t.start();

// Blah blah

t.join();

class WorkerThread extends Thread {
    public void run() {
        // Do some stuff
    }
}

По крайней мере, так оно должно работать и как оно работает в любом случае, которое мы можем воспроизвести.Однако у нас есть один клиент, который постоянно сталкивается с проблемами.

Глядя на потоки, использующие PsiProbe, они видят, что рабочий поток создан.Он работает какое-то время, но через некоторое время исчезает из списка потоков.Это происходит в неожиданное время (в зависимости от времени других событий, связанных с рабочим потоком).Основной поток никогда не выходит из вызова join().

Это, похоже, нарушает контракт join() и подразумевает какую-то ошибку уровня JVM.Кто-нибудь был свидетелем такого поведения, или есть какие-либо идеи, что могло бы вызвать его?клиент, но кажется вероятным, что я действительно не знал, что я думал, что я знал: основной поток, скорее всего, не блокируется в join() вообще, но в точке, предшествующей этому.все равно для идей.

1 Ответ

0 голосов
/ 01 марта 2011

Быстрый поиск в базе данных ошибок Java не дал ничего, что соответствовало бы вашим симптомам.Но это стоит того, чтобы выполнить более расширенный поиск.


Однако стоит отметить, что ошибка JVM - это только одна из многих возможных теорий (см. Комментарии), а их очень мало.доказательства для любой теории на данном этапе.На вашем месте я бы:

  1. выяснил, что представляет собой платформа клиента.
  2. выполнил бы поиск в базе данных ошибок Java для любых известных ошибок, которые, кажется, соответствуют наблюдаемым признакам (такими, как они).
  3. если вы найдете ошибку, которая выглядит как «хит», оцените ее дальше, попробуйте подтвердить, что это действительно проблема клиента, и посмотреть, есть ли способы ее устранения..
  4. в дополнение ...
    • посмотрите на другие возможные теории;например, см. выше
    • , попытайтесь выяснить, что отличается от установки клиента по сравнению с другими, у которых нет этой проблемы
    • добавьте больше мониторинга и попытайтесь заставить клиента использовать эту версию.

(В последнем пункте маркера может быть необходимо указать очевидное для клиента. Если они хотят, чтобы ошибка была исправлена, им, возможно, придется делать дополнительные действия.чтобы помочь вам отследить ошибку, например, немного запустить "экспериментальную" версию приложения.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...