Рассмотрим принцип паттерна на примере Синглетона.
// Не работает в 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. Он позволяет корректно обработать запись в переменную в многопоточном режиме.
Комментариев нет:
Отправить комментарий