Java избежать состояния гонки БЕЗ synchronized/lock

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

Мой вопрос в том, есть ли другие (лучшие) способы избежать состояния гонки? Блокировка делает программу медленной.

Вот что я нашел:

  • использование атомарных классов, если есть только одна общая переменная.
  • использование неизменяемого контейнера для нескольких общих переменных и объявление этого объекта-контейнера с volatile. (Я нашел этот метод из книги "Java Concurrency in Practice")

Я не уверен, что они работают быстрее, чем синхронизированный способ, есть ли другие лучшие методы?

спасибо

7
задан cn1h 1 December 2011 в 11:27
поделиться