Dejando a los complicados detalles técnicos detrás, se puede ver volatile
más o menos como un modificador de synchronized
variables de. Cuando desea sincronizar el acceso a los métodos o bloques, entonces por lo general le gustaría utilizar el modificador synchronized
de la siguiente manera:
public synchronized void doSomething() {}
Si desea "sincronizar" el acceso a las variables, entonces' d gustaría usar el volatile
modificador:
private volatile SomeObject variable;
Detrás de las escenas que hacen cosas diferentes, pero la efecto es el mismo: los cambios son inmediatamente visibles para el próximo hilo que accede.
En su caso específico, no creo que el modificador volatile
tenga algún valor. El volatile
no garantiza de ninguna manera que el hilo que asigna el objeto se ejecutará antes de el hilo que utiliza el objeto. Puede ser tan bueno al revés. Probablemente solo quiera hacer una comprobación nula en el método use()
primero.
actualización: ver también this article:
El acceso a las variables actúa como si que está encerrado en un bloque sincronizado, sincronizado sobre sí mismo. Decimos "actúa como si" en el segundo punto, porque para el programador al menos (y probablemente en la mayoría de las implementaciones de JVM) no existe un objeto de bloqueo real implicado.
¿Qué versión de Java estás usando? – Alerty
Estoy desarrollando en un dispositivo móvil. Es básicamente java 1.4.x – Tiyoal