Здесь три дискретных объекта с синхронизацией.
Сама переменная массива: Объявление переменной array
как volatile
или final
(или синхронизация по array
) имеет важное значение, так что оба потока гарантированно получают доступ к одному и тому же экземпляру массива , Если нет, возможно следующее:
- Потоки A и B запускаются
- Thread A создает
array
как новый объект Array
- Поток B пытается получить доступ к потоку A
array
, но получает NullPointerExceptoin
потому что он еще не видит назначение потоком A нового массива array
.
Не хорошо.
Массив ссылается на экземпляры MyObject (и, как представляется, актуальный вопрос Венкатрамана): Если переменная array
сама синхронизирована должным образом, то yes, два потока могут обращаться к различным элементам в массив надежно. Как только дочерний поток завершит делать то, что делал, тогда «главный» поток захочет синхронизировать массив, чтобы убедиться, что он получает конечное состояние дочерних элементов массива перед их использованием.
Сами экземпляры MyObject , но это выходит за рамки вопроса