диапазон привязывает Java

У меня есть большой массив, к которому получат доступ несколько, распараллеливают. Единственная блокировка не достаточно эффективна. Существует ли класс блокировки диапазона в Java или scala?

7
задан user398384 21 July 2010 в 19:24
поделиться

4 ответа

Нет в стандартных библиотеках. ConcurrentHashMap делает это, однако внутренне представляет хеш-таблицу в виде «сегментов» (16 из них по умолчанию), каждый из которых защищен отдельной блокировкой. Кроме того, этот поток задает тот же вопрос, за исключением ArrayList вместо массива. Хотя это и бесполезно, оно предлагает альтернативы, если вы можете пойти на компромисс при использовании.

Обновление: возможно, AtomicReferenceArray и друзья обеспечат желаемую эффективность, в то же время «обеспечив [ing] семантику изменчивого доступа к элементам массива» ( JCIP 15.3).

6
ответ дан 7 December 2019 в 03:09
поделиться

Вообще говоря, за исключением случаев, когда у вас действительно специфическая потребность в параллелизме, вы найдете очень оптимизированные и удобные объекты в пакете java.util.concurrent из jdk.

Я могу посоветовать книгу Брайана Гетца "Java Concurrency in Practice", очень хорошая книга, объясняющая много вещей о потоках в java и пакете java.util.concurrent.

2
ответ дан 7 December 2019 в 03:09
поделиться

Оберните массив в потокобезопасный объект, который контролирует доступ. Вы можете либо управлять диапазонами самостоятельно, либо разбить массив на диапазоны, каждый со своей собственной блокировкой, и ссылаться на него таким образом.

1
ответ дан 7 December 2019 в 03:09
поделиться

Это действительно зависит от вашего использования. Если вы на самом деле имеете в виду ArrayList , а не просто массив, тогда вам, вероятно, придется свернуть свой собственный и снять блокировки, поскольку ArrayLists может изменять размер, что может действительно испортить несинхронизированное чтение и запись.

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

0
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: