¿Por qué es volátil? Se utiliza en el bloqueo de doble verificación

DesdeHead First libro de patrones de diseño, el patrón singleton con doble bloqueo verificado se ha implementado de la siguiente manera:

public class Singleton {
    private volatile static Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

No entiendo por quévolatile esta siendo usado. Novolatile@ uso anula el propósito de usar el bloqueo doblemente comprobado, es decir, el rendimiento?

Respuestas a la pregunta(6)

Su respuesta a la pregunta