С учетом следующего кода:
public class FooBar {
public static volatile ConcurrentHashMap myConfigData = new ConcurrentHashMap();
}
public class UpdaterThread implements Runnable {
public void run() {
//Query the Data from the DB and Update the FooBar config Data
FooBar.myConfigData = ConfigDataDAO.getLatestConfigFromDB();
}
}
Thread-Class будет регулярно обновлять переменную myConfigData Member Member (через Исполнителя каждые 5 минут). Является ли настройка myConfigData во «внешнем» потоке потокобезопасной (атомарной) или мне нужно синхронизировать каждую операцию чтения и записи с переменной myConfigData?
РЕДАКТИРОВАТЬ: Вопрос не в том, является ли ConcurrentHashMap поточно-ориентированным (согласно javadoc), а в настройке самого ConcurrentHashMap в переменной myConfigData Member. Эта переменная может быть прочитана и записана "сразу" несколькими потоками, поэтому вопрос заключается в том, является ли параметр атомарным или нет. Я думаю, что это можно обобщить так: «Является ли установка ссылочной переменной Java атомарной или нет?».
(Я также сделал его нестабильным. Это другая проблема, и она не имеет ничего общего с атомарностью - мой вопрос, а скорее с «видимостью в других потоках» и отношениями до и после).