Рассмотрим принцип паттерна на примере Синглетона.
// Не работает в Java 1.4 и более ранних версиях из-за семантики volatile
class Foo {
private volatile Helper helper = null;
public Helper getHelper() {
if (helper == null) { //блок проверки, для ускорения производительности
synchronized(this) { //блок синхронизации
if (helper == null) //если обьект еще не создан, то создаем его
helper = new Helper();
}
}
return helper;
}
}
Первый блок проверки нужен для того, чтобы при инициализированной переменной не блокировать участок кода, тем самым ускорить процесс выполнения программы. Внутренняя проверка служит для проверки, инициализирована ли переменная, чтобы в последуюущих случаях обращения к ней после инициализации выдавался уже созданный ее экземпляр. Блок синхронизации разделяет доступ потоков к коду, инициализирующему переменную.
Модификатор volatile появился начиная с версии Java 1.5. Он позволяет корректно обработать запись в переменную в многопоточном режиме.
Комментариев нет:
Отправить комментарий