2016-10-03 13 views
-1

после использования вопросов и ответов на эту замечательную страницу более 2 лет, я решил присоединиться к сообществу!Объекты Readonly и многопоточность

Теперь мой вопрос:

Я имел беседу с другом на другой день: Мы считаем, что переменные, которые являются только для чтения или только для чтения нитей не нужен замок или что-нибудь еще, чтобы обеспечить считываются правильные значения. Но что с другими объектами, такими как аррайалисты, хэшмапы? Знаю ли я наверняка, что несколько потоков могут без проблем использовать значения любых объектов одновременно?

Не будьте слишком суровы на меня, если я попрошу неправильный путь или пропустил что-то очевидное в моем процессе мышления (все еще думая об атомарности ...). Я благодарен за любой ответ :)

+0

Такая переменная должна быть объявлена ​​окончательной, а затем да, она является потокобезопасной. – olsli

ответ

0

Если строительство Map/List потокобезопасно и если ArrayList или HashMap не изменяется после окончания строительства, то да, ваши потоки будут иметь возможность читать данные правильно. Если новые данные добавлены или существующие данные изменены, то без надлежащей синхронизации нет гарантии, что новые изменения будут видны другим потокам.

0

Либо ваши пользовательские общие данные/объекты должны иметь неизменяемый/записываемый-один раз/только для чтения-после-типа.

ИЛИ

Вам необходимо синхронизировать тип коллекции. Либо вы можете использовать тип коллекции из пакета java.util.concurrent, выпущенного с помощью JSR 166, либо синхронизировать свою коллекцию с помощью функции java.util.Collections.synchronizedCollection (Collection obj).

Просто имейте в виду, что параллельная сборка намного быстрее и оптимизирована по сравнению с synchronizedCollection для многопоточных операций.