Я читал эту статью:
https://www.javamex.com/tutorials/synchronization_final.shtml
В нем говорилось:
Поля любого объекта, доступ к которому осуществляется через конечную ссылку, также гарантированно будут как минимум такими же актуальными, как и при выходе из конструктора. Это означает, что: Значения полей final, включая объекты внутри коллекций, на которые ссылается конечная ссылка, можно безопасно считывать без синхронизации.
Скажем, у меня есть класс, как показано ниже:
public class Cache {
private Map<String, Currency> currencyMap = new ConcurrentHashMap<String, Currency>();
private List<Currency> currencyList = new ArrayList<Currency>();
}
Если я объявлю в своем основном классе приложения:
private final Cache cache;
Означает ли это, что если поток A обновит currencyMap и currencyList, то это гарантирует, что поток B увидит последние записи в currencyMap и currencyList?
private final AtomicReference<Cache> cache;
в своем основном классе. - person j.seashell   schedule 06.02.2019