Я использую ReadWriteLock для реализации/поддержания иконок блокировки.
Начиная с JDK8 StampedLock. И поскольку RWLocks известны своей медленностью и плохой производительностью, StampedLock выглядит как альтернатива (они не реентерабельны, а намного быстрее).
Однако, несмотря на производительность, мне кажется, что StampedLock намного сложнее и сложнее в обслуживании и использовании - например, потоки теперь могут блокироваться против самих себя, поэтому необходимо принять соответствующие меры.
Каковы преимущества StampedLock над RWLock?
В этой статье объясняются различия в деталях.
У ReentrantReadWriteLock было много недостатков: он страдал от голода. Вы не смогли обновить блокировку чтения в блокировку записи. Не было поддержки оптимистичных чтений. Программисты "в курсе" в основном избегали их использования.
Doug Lea новый Java 8 StampedLock решает все эти недостатки. С некоторыми умными идиомами кода мы также можем добиться более высокой производительности.
Ну, да, у ReentrantReadWriteLock были проблемы (по сравнению с традиционным синхронизированным блоком) в 5.0, но они исправили его в java 6.0.
Итак, если вы, ребята, используете Java 6 на производстве, вы можете с уверенностью использовать API блокировки.
Эффективная блокировка и традиционная синхронизация дают вам то же самое.
Хорошая вещь о API-интерфейсе блокировки заключается в том, что он использует CAS/non-blocking, поэтому он никогда не окажется в тупике, если вы не забудете разблокировать его в блоке finally
.