class MyClass
{
private static volatile Resource resource;
public static Resource getInstance()
{
if(resource == null)
resource = new Resource();
return resource;
}
}
Здесь, если Ресурс является неизменным классом, безопасно ли написать вышеприведенный код? Как и в java-параллелизме на практике, упоминается, что «безопасность инициализации позволяет правильно сконструированные неизменяемые объекты безопасно распределять по потоку. Таким образом, вышеприведенный код безопасен для написания». (на странице № 349 16.3). Но с этим возможно, если два потока проверили нуль, и они могут продолжить создание объекта, что противоречит инварианту класса (singleton). пожалуйста, объясни. Продолжение вопроса в linksingleton с неизменным классом в java
Этот вопрос есть * так * рядом с вашим [другим вопросом] (http://stackoverflow.com/questions/15077910/singleton-with-volatile-in-java), чтобы волосы подталкивали его в направлении дублирования. – Perception
@Perception Спасибо. Вы говорите, что два потока создадут два разных объекта? – Trying
Умм, нет, я ничего подобного не говорю. Я говорю, что вы могли внести небольшую поправку в свой первоначальный вопрос, чтобы охватить этот крайний сценарий. – Perception