Я пытаюсь узнать об одноэлементных классах и о том, как их можно использовать в приложении, чтобы обеспечить его безопасность в потоке. Предположим, у вас есть одноэлементный класс IndexUpdater, ссылка на который получается следующим образом:
public static synchronized IndexUpdater getIndexUpdater() {
if (ref == null)
// it's ok, we can call this constructor
ref = new IndexUpdater();
return ref;
}
private static IndexUpdater ref;
Давайте предположим, что в классе есть другие методы, которые выполняют реальную работу (индикаторы обновления и т. Д.). Что я пытаюсь понять, так это то, как доступ и использование синглтона будут работать с двумя потоками. Давайте предположим, что во время 1 поток 1 получает ссылку на класс посредством вызова, подобного этому IndexUpdater iu = IndexUpdater.getIndexUpdater (); Затем,
во время 2, используя ссылку iu, метод внутри класса называется потоком iu.updateIndex. Что произойдет во время 2, второй поток попытается получить ссылку на класс. Может ли это сделать, а также получить доступ к методам внутри синглтона или это будет предотвращено, если первый поток имеет активную ссылку на класс. Я предполагаю последнее (или иначе, как это будет работать?), Но я хотел бы убедиться, прежде чем я реализую.
Спасибо,
Эллиот