Mi proyecto java appengine no mantiene ningún estado entre solicitudes, excepto para los siguientes usos de Memcache:Lista de verificación para java thread-safe en appengine
- Objectify utiliza Memcache para almacenar en caché del almacén de datos se
- utilizo Memcache como una forma de tareas de limpieza por lotes después de varias solicitudes (por ejemplo,
if (the memcache doesn't think a cleanup task is already running) schedule another cleanup task
).
que no tienen referencias globales/estáticas a todos los objetos, excepto:
- El usuario autenticado actual se mantiene en un objeto
static ThreadLocal<User>
. Esto significa que cada solicitud tendrá su propia copia de un Usuario, ¿verdad? - Tengo una clase que maneja toda la manipulación de datos, y una instancia se mantiene como una especie de variable global en un objeto
static DataCoordinator
.
¿Qué debo tener en cuenta para hacer que mi código sea seguro para subprocesos? ¿Debo arrojar una palabra clave synchronized
en cada declaración de método en mi implementación DataCoordinator
, ya que varios subprocesos podrían acceder a ella? ¿Es cierto que el objeto ThreadLocal<User>
siempre creará un objeto User
por separado para cada subproceso, de modo que cada solicitud se autenticará por separado?
Soy un novato total para el pensamiento seguro de subprocesos. ¿Qué debería leer?
Gracias por cualquier ayuda, y disculpe por la falta de especificidad.
¿Tiene alguna singlton clases, en las que siempre se obtiene una referencia a la misma instancia a través de un .getInstance()? Si es así, múltiples solicitudes paralelas ejecutadas en diferentes subprocesos dentro de la misma VM/instancia podrían obtener una referencia al mismo objeto ... y luego clasificarlas en su uso o modificación de variables de instancia. –