Concurrencia de Java - Publicación de objetos inmutables (Concurrencia de Java en la práctica)

En Java Concurrencia en la práctica, el autor afirmó que

Los objetos inmutables pueden ser publicados a través de cualquier mecanismo.Los objetos inmutables pueden ser utilizados de forma segura por cualquier hilo sin sincronización adicional, incluso cuando la sincronización no se utiliza para publicarlos.

¿Significa que los siguientes modismos son seguros para publicar objetos inmutables?

public static List<ImmutableObject> list = new ArrayList<ImmutableObject>();

// thread A invokes this method first
public static void methodA () {
    list.add(new ImmutableObject());
}

// thread B invokes this method later
public static ImmutableObject methodB () {
    return list.get(0);
}

¿Habría alguna carrera de datos? (lo que significa que es posible que el subproceso B no pueda ver el Objeto inmutable en la lista agregada por el subproceso A)

Muchas gracias.

Más aún, el autor dijo que el siguiente código es seguro si Resource es inmutable.

@NotThreadSafe
public class UnsafeLazyInitialization {
    private static Resource resource;

    public static Resource getInstance() {
        if (resource == null)
            resource = new Resource();  // unsafe publication
        return resource;
    }
}

Sección 16.3 La garantía de seguridad de inicialización permite que los objetos inmutables construidos correctamente se compartan de forma segura en subprocesos sin sincronización, independientemente de cómo se publiquen, incluso si se publican con una carrera de datos. (Esto significa queunsafeLazyInitialization es realmente seguro siResource es inmutable)

Para la segunda parte de esta pregunta, se trata en detalle en otra pregunta (haga clic enaquí)

Respuestas a la pregunta(4)

Su respuesta a la pregunta