Я читаю исходный код JDK (1.8.0_05). Установлено, что ReentrantLock используется для обеспечения надежных рабочих. Автор просто сказал 2 причины.Использование ReentrantLock в ThreadPoolExecutor для обеспечения надежных рабочих потоков
- Причина 1:
Это упорядочивает interruptIdleWorkers, что позволяет избежать ненужных прерывают шторма, особенно во время shutdown.Otherwise выходящих потоков бы одновременно прерывают те, которые еще не прерывались.
- Причина 2:
Это также упрощает некоторые соответствующую статистику бухгалтерское largestPoolSize и т.д..
Может ли кто-нибудь более подробно рассказать о причине, особенно о причине 1? Я просто не понимаю идею на уровне дизайна.
P.S. Как насчет использования Collections.synchronizedSet?
Да, на самом деле SynchronizedSet понадобится ручная синхронизация в некотором случае, то есть при повторении по заднему набору. По сравнению с синхронизированным, ReentrantLock предпочтительнее. –
Ваше объяснение по причине № 1 также хорошо. :) –