|
|
|
Самопроизвольное завершение потоков
|
|||
|---|---|---|---|
|
#18+
Запускаю потоки через Executors.newCachedThreadPool(). Потоки могут порождать дочерние, но не более 2-го уровня. Некоторые из потоков запускаются, но потом бесследно куда-то исчезают. Вот пример кода внутри потока: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Все процессы запускаются (фиксируют log("started")), но небольшой процент потоков почему то не доходит до log("end"), при этом в секцию catch не попадает, но выполняет секцию finally. В выводе консоли никаких эксепшенов нет. Никаких выходов из основного блока нет. Из кода процессы принудительно не прерываются. Может ли ExecutorService самостоятельно прерывать порожденные процессы? Но разве при этом не должен выполниться catch с InterruptedException? Почему такое может происходить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:05 |
|
||
|
Самопроизвольное завершение потоков
|
|||
|---|---|---|---|
|
#18+
publexus, У вас вылетает Throwable или Error, который не ловится в catch(Exception e). Гребаный ThreadPoolExecutor непойманые исключения спокойно игнорирует и даже никуда не выводит. Поменяейте на catch(Throwable e) и увидите какая у вас ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:13 |
|
||
|
Самопроизвольное завершение потоков
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Сделал как вы сказали. Запустил несколько раз тесткейс. Во всех случаях все задачи отработали до конца (хотя до этого в большинстве тесткейсов терялись потоки). Но при этом никаких эксепшенов в логах не было. Чудеса! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:56 |
|
||
|
Самопроизвольное завершение потоков
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Однако при запуске более тяжелого тесткейса, выскочило java.lang.OutOfMemoryError: unable to create new native thread. Но сейчас я отлавливаю эту ошибку. Теперь понятно, что система не могла запустить поток из-за нехватки ресурсов и тупо прерывала текущий. Спасибо Blazkowicz за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 15:23 |
|
||
|
Самопроизвольное завершение потоков
|
|||
|---|---|---|---|
|
#18+
publexusОднако при запуске более тяжелого тесткейса, выскочило java.lang.OutOfMemoryError: unable to create new native thread. Но сейчас я отлавливаю эту ошибку. Теперь понятно, что система не могла запустить поток из-за нехватки ресурсов и тупо прерывала текущий.Текущие потоки никто не прерывал. Они сами себя прерывали, если им требовалось что-то заалоцировать, но не получалось из-за нехватки памяти. в общем случае, OOME в одном потоке никак не влияет на другие потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 16:03 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38780127&tid=2126433]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 502ms |

| 0 / 0 |
