Оставив сложные технические детали позади, вы можете увидеть volatile
меньше или больше в качестве модификатора synchronized
для переменных. Когда вы хотите, чтобы синхронизировать доступ к методам или блоков, то вы обычно хотите использовать модификатор synchronized
следующим образом:
public synchronized void doSomething() {}
Если вы хотите «синхронизировать» доступ к переменным, то вам» хотел бы использовать volatile
модификатор:
private volatile SomeObject variable;
за кулисами они делают разные вещи, но эффект одно и то же: изменения сразу видны для следующего за доступом нити.
В вашем конкретном случае я не думаю, что модификатор volatile
имеет любое значение. volatile
не гарантирует, что поток, назначающий объект, будет запускать до поток с использованием объекта. Это может быть так же хорошо. Вероятно, вы просто хотите сначала выполнить nullcheck в методе use()
.
Обновление: также увидеть this article:
Доступ к переменной действует как будто он заключен в синхронизированный блок, синхронизированы на себя. Мы говорим, что «действует как бы» во втором пункте, потому что для программиста, по крайней мере (и, вероятно, в большинстве реализаций JVM) , фактический объект блокировки не задействован.
Какую версию Java вы используете? – Alerty
Я развиваюсь на мобильном устройстве. Это в основном java 1.4.x – Tiyoal