ReadWriteLock против StampedLock

1

Я использую ReadWriteLock для реализации/поддержания иконок блокировки.

Начиная с JDK8 StampedLock. И поскольку RWLocks известны своей медленностью и плохой производительностью, StampedLock выглядит как альтернатива (они не реентерабельны, а намного быстрее).

Однако, несмотря на производительность, мне кажется, что StampedLock намного сложнее и сложнее в обслуживании и использовании - например, потоки теперь могут блокироваться против самих себя, поэтому необходимо принять соответствующие меры.

Каковы преимущества StampedLock над RWLock?

  • 2
    Мне всегда интересно, что люди готовы потратить 5 минут на то, чтобы записать вопрос ... где требуется всего 5-10 секунд, чтобы найти очень полезные ответы на такую тему «А против Б» с помощью любимой поисковой системы.
  • 0
    Откуда вы узнали, что RWLocks известны своей плохой производительностью?
Показать ещё 1 комментарий
Теги:
multithreading
java-8
java.util.concurrent

2 ответа

5

В этой статье объясняются различия в деталях.

У ReentrantReadWriteLock было много недостатков: он страдал от голода. Вы не смогли обновить блокировку чтения в блокировку записи. Не было поддержки оптимистичных чтений. Программисты "в курсе" в основном избегали их использования.

Doug Lea новый Java 8 StampedLock решает все эти недостатки. С некоторыми умными идиомами кода мы также можем добиться более высокой производительности.

  • 3
    Примечание: StampedLock сложнее использовать в зависимости от операции, которую вы хотите выполнить, когда заблокированы.
0

Ну, да, у ReentrantReadWriteLock были проблемы (по сравнению с традиционным синхронизированным блоком) в 5.0, но они исправили его в java 6.0.

Итак, если вы, ребята, используете Java 6 на производстве, вы можете с уверенностью использовать API блокировки.

Эффективная блокировка и традиционная синхронизация дают вам то же самое.

Хорошая вещь о API-интерфейсе блокировки заключается в том, что он использует CAS/non-blocking, поэтому он никогда не окажется в тупике, если вы не забудете разблокировать его в блоке finally.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню