¿Los ámbitos singleton/sesión de Spring Beans requieren que se sincronice el acceso a todos sus campos? Diga a través de la palabra clave "sincronizada" o usando algunas clases del paquete "java.util.concurrent".Primavera: ámbitos únicos y de sesión y concurrencia
Como ejemplo, ¿este código no es seguro para subprocesos? (Copiar/pased de here):
@Component
@SessionScoped
public class ShoppingCart {
private List<Product> items = new ArrayList<Product>();
public List<Product> getAllItems() {
return items;
}
public void addItem(Product item) {
items.add(item);
}
}
Si alguien llama a getItems() y comienza a iterar sobre él, mientras que al mismo tiempo otro subproceso tiene un addItem(), se eliminará una ConcurrentModificationException. Consulte http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html para obtener notas sobre lo que debe sincronizarse para la seguridad de subprocesos con ArrayList. –
La clase no es segura para subprocesos porque la colección de 'elementos' no se publica con seguridad; items.add() no proporciona ninguna garantía de que su efecto sea visible para el hilo sobre el actual y no sea atómico. –
Hmmm Tenía la impresión de que el hecho de que la clase también sea 'SessionScoped' y solo pueda ser actuada por un único actor dentro del contenedor Spring garantizaría la seguridad del hilo de la clase. –