Widziałem kilka przykładów w java, gdzie synchronizują się na bloku kodu, aby zmienić pewną zmienną, podczas gdy zmienna ta została początkowo uznana za niestabilną. Widziałem to w przykładzie klasy singleton, gdzie zadeklarowali unikalną instancję jako zmienną i sychronizowali blok, który inicjuje tę instancję ... Moje pytanie brzmi: dlaczego deklarujemy to jako niestabilne, podczas gdy my je synchronizujemy, dlaczego potrzebujemy obu? czy żaden z nich nie jest wystarczający dla drugiego?dlaczego używasz lotnych z zsynchronizowanym blokiem?
public class someClass {
volatile static uniqueInstance = null;
public static someClass getInstance() {
if(uniqueInstance == null) {
synchronized(someClass.class) {
if(uniqueInstance == null) {
uniqueInstance = new someClass();
}
}
}
return uniqueInstance;
}
z góry dzięki.
Co to jest "volatile static uniqueInstance = null;" ? –