¿Cuál es la diferencia en el uso de palabras clave volátiles en java4 y java5 en adelante?
JMM antes de que JDK5 se rompa y el uso de volátiles para JDK4 puede no proporcionar el resultado deseado. Para obtener más comprobar esto: http://www.ibm.com/developerworks/library/j-jtp02244/
operaciones de lectura/escritura en variables no atómicos (largo/doble) son atómica cuando se declaran tan volátil.
Lectura/Escritura para doble/largo pasan como dos operaciones separadas de 32 bits. Para dos hilos es posible que un hilo haya leído 32 bits más altos y otro haya leído 32 bits más bajos de una variable larga/doble. En resumen, leer/escribir en largo no es operación atómica a diferencia de otras primitivas. Se supone que el uso de volátiles para larga/doble proporciona la garantía de que las instrucciones para volátiles no se vuelven a solicitar para lectura/escritura volátil por el compilador y volátiles también proporciona garantía de visibilidad. Pero nuevamente puede no funcionar para JDK 4 o antes.
http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#volatile – Luciano
¿Por qué supone que hay diferencias entre java4 y java5 relacionadas con la palabra clave volátil? – claesv
@claesv porque hay. El modelo de memoria de Java cambió entre esas versiones. – Luciano