Я прочитал Java Concurrency in Practice и оставил этот вопрос: когда я использую ConcurrentHashMap, какие проблемы параллелизма данных, обсуждаемые в первой части книги, мне все еще нужно беспокоиться? Вот несколько примеров из одной из моих программ:Использование ConcurrentHashMap устраняет проблемы с видимостью данных?
1. Текущее положение трейдера (общий целое, где «целое» является математический термин)
Это число представляет собой то, что trader
объект в настоящее время владеет и определяет свое состояние. Он должен прочитать свою позицию, чтобы знать, что делать (посмотрите, чтобы начать новую позицию или управлять текущей). Trader
методы работают в своей собственной теме.
A broker
объект отвечает за положение trader
. Он будет устанавливать позицию каждый раз, когда один из заказов трейдера будет заполнен. Broker
методы запускаются по собственной теме.
И trader
, и broker
находятся в одной упаковке. Позиция реализована как пакет-частный static ConcurrentHashMap
. Ключами являются идентификаторы объектов трейдера. Значения Integer.
Внешний вид упаковки - приложение. Он позиционирует позиции трейдеров косвенно с публичным получателем.
Позиции будут меняться не чаще, чем раз в несколько минут, поэтому broker
не будет касаться карты очень часто. Однако часто будут считываться trader
и приложение. Кроме того, у нас часто есть несколько трейдеров, читающих карту одновременно.
Итак, используя ConcurrentHashMap таким образом, мне не нужно работать с блокировкой и видимостью данных? ConcurrentHashMap заботится обо всем?
2. Рынок (Bid, Ask, последние цены)
Практически такая же ситуация, как положение, за исключением того, теперь broker
будет очень часто обновлять цены (до 10 обновляет вторую во время напряженного времени , обычно несколько раз в секунду). trader
и приложение все еще часто читают. Ключами карты теперь являются коды, указывающие, какой запас или будущее, а значения - объекты, которые удерживают рыночные цены.
Кажется, что все в порядке, но, прочитав JCIP, я понимаю, что программа все еще может быть сломана, если все не выполнено правильно. В книге рассказывается о ConcurrentHashMap, но явным образом не говорю, какие проблемы из Части I нам больше не нужно решать вручную. Это появляется, что я не должен synchronize
ничего в этом случае. Это верно?
Я бы посоветовал вам переформулировать свой вопрос. Это предполагает, что каждый прочитал книгу. Это ограничит количество полученных вами ответов. – Davidann