ConcurrentHashMap en Servlet

Tengo ConcurrentHashMapque almaceno en el contexto de servlet, los datos en el mapa cambian simultáneamente, sé que el contexto de servlet no es seguro para subprocesos, pero sí ConcurrentHashMap(para escribir). ¿Debo usar la construcción sincronizada en este caso?

 synchronized (context) {
   ConcurrentHashMap messages =(ConcurrentHashMap)context.getAttribute("map");
   String mes  = messages.get("id");  // can be changed by another thread?
   messages.put("id",mes +"changed by thread 1");   
  }
Respuesta 1

Lo siento pero no veo el problema. "mensajes" es una variable local en este ejemplo, cada hilo tendría uno. No estás compartiendo "mensajes"

El único problema podría surgir cuando lees desde el "contexto", por lo que solo necesitarás sincronizar esa lectura

ConcurrentHashMap messages = null;
synchronized (context) {
    ConcurrentHashMap messages =(ConcurrentHashMap)context.getAttribute("map");
}
String mes  = messages.get("id");  // can be changed by another thread?
messages.put("id",mes +"changed by thread 1");   

pero, lo mejor es evitar eso. ¿Cómo evitará la sincronización en el contexto del formulario de lectura? simple, no debe escribir en contexto o hacerlo solo en el proceso de inicialización.

Respuesta: 2

Si almacena el Mapa cuando se inicia ServletContext, no necesita sincronizar su obtención, ya que no lo eliminará hasta que se cierre el contexto.

No importa si el Mapa maneja la concurrencia o no. En el último caso, necesitaría sincronizar en el Mapa, pero como está utilizando uno que maneja la concurrencia, ni siquiera necesita hacerlo.

Respuesta: 3

Actualmente estoy tratando de implementar un escucha de acción en mi JCheckBox para que cuando se seleccione, se abra un JFileChooser para que el usuario elija un archivo que desea que use la GUI. Para empezar, cómo ...

Básicamente, estoy escribiendo un módulo Java que se supone que toma texto en inglés y cambia los géneros de los pronombres. Entonces, por ejemplo, si le das "Ella puso la caja sobre la mesa", te devolvería ...

Estoy tratando de hacer pruebas para mi aplicación de arranque Spring y tengo un gran problema. Así es como se ve mi error: org.mockito.exceptions.misusing.WrongTypeOfReturnValue: WorkItem no puede ser ...

'java.lang.ClassNotFoundException: javax.faces.webapp.UIComponentTag' Se produjo un error cuando ejecuto mi aplicación de struts en MyEclipse IDE con el servidor web WebLogic 1o.2. <Error> <Implementador y ...