просто перестают работать. В логах нет никаких ошибок. UncaughtExceptionHandler через ThreadFactoryBuilder я подставил, логирование в нём сделал. В логах нет ничего неправильного...
Весь процесс вот такой.
log.info("Starting cycle [{}], channel [{}]"...
... причинять пользу
log.info("Completed cycle [{}], channel [{}]"...);
B логах после нормального завершения программы я вижу 48 стартов и только 7 комплитов.
Есть какие-то идеи? Любые, даже безумные.
дедлоки?
Оно бы висело тогда, а у меня процесс завершается.
Daemon threads?
Да, все потоки демоны. Но у меня на свинге приложуха, она не завершается буквально, остаётся висеть. И есть ожидание завершения задач в пуле. pool = createPool(num, "stitching"); for (int cycleIndex = 0; ... ) { for (int channelIndex = 0; ...) { pool.submit( ... ); } } pool.shutdown(); pool.awaitTermination(SystemInfo.TIME_OUT, SystemInfo.TIME_OUT_UNIT);
Я бы тут проверил бы - awaitTermination, а то может он становил все по таймаута
У меня была идея, что треды отваливаются. Но если они останавливаются по этому событию, должен быть interrupt. А там у меня вроде Exception перехватывается. То есть в логах должно что-то быть. И ещё есть UncaughtExceptionHandler с логированием. Он тоже молчит.
Короче, у меня случался OOM и треды в пуле просто погибали. Из-за того, что был try {} catch (Exception), я не мог словить OOM, чтобы залогировать. И оказалось, что UncaughtExceptionHandler срабатывает только в случае вызова тасок через pool.execute(). Когда таски запускаются через pool.submit(), то Exception является частью результата таски и через Uncaught handler не ловится.
как catch(Exception) мог ловить Error?
Никак не мог, поэтому в логах было тихо и спокойно.
Обсуждают сегодня