Я пытаюсь отладить проблему. У нас есть несколько потоков, которые работают с данными из BoundedLinkedQueue. После обработки одной записи текущий поток выполняет Thread.currentThread().yield()
.
Теперь время от времени наблюдается, что одна из нитей просто исчезает! Я проследил журналы, чтобы найти, что такой «исчезающий» поток работает до оператора yield. После этого не обнаружено никаких следов этого потока, а также нет ошибок или исключений рядом с последним журналом, увиденным для потока.
Может кто-нибудь дать какие-нибудь указатели для отладки направления? Является ли использование доходности правильным? Является ли доход достоверным утверждением? Это потому, что я обнаружил эту статью, предлагающую избежать заявления о доходности? Кто-нибудь видел такое условие раньше?
Редактировать: В некоторых исследованиях кажется, что try / catch может пропустить некоторые исключения, и они будут просто помещены в System.err, что может быть незаметно в многопоточной среде. Спасибо @JVerstry за указатель, я установил uncaughtexceptionhandler для потока. Процесс сборки и запуска занимает много времени. Буду обновлять еще раз у меня что-то конкретное.
Вот несколько ссылок, которые говорят о UncaughtExceptionHandler: