sincronizacion resueltos prioridad hilos fuente estados ejemplos componentes codigo java collections synchronization

resueltos - prioridad en hilos java



¿Por qué bloquear las colecciones seguras de Thread? (1)

1) Sí, necesita realizar el bloqueo del lado del cliente mientras itera, pero la mayoría de los otros métodos no requieren que lo haga. Consulte Explicar la sincronización de colecciones cuando se utilizan iteradores.

2) Así que responder a sus segundas preguntas automáticamente se convierte en sí. Puede ver qué operaciones son seguras para hilos en la documentación (la mayoría de ellas son).

3) En cuanto a la recolección segura de subprocesos sin usar la sincronización : es algo que suena como una tarea quizás difícil que debería ser fácil para el equipo de desarrolladores profesionales que desarrollan la plataforma. Pero, en realidad, es una pesadilla en la era de los entornos de múltiples núcleos y las optimizaciones agresivas. Siempre habrá una compensación entre la funcionalidad (que puede sonar tan simple como esta) y el rendimiento (la sincronización en la memoria caché del procesador requiere una gran cantidad de tiempo). Por favor, consulte el video de Angelica Langer (en el modelo de memoria Java).

Espero que esto ayude.

java.util.concurrent proporciona muchas colecciones seguras para hilos como ConcurrentHashMap , ConcurrentSkipListMap , ConcurrentSkipListSet y ConcurrentLinkedQueue . Se supone que estas colecciones minimizan la contención al permitir el acceso simultáneo a diferentes partes de la estructura de datos.

Java también tiene contenedores sincronizados para permitir el acceso simultáneo a colecciones que no sean seguras para hilos, como HashMap y Arraylist .

Map<KeyType, ValType> m = Collections.synchronizedMap(new HashMap<KeyType, ValType>());

¿Todavía tenemos que realizar el bloqueo del lado del cliente cuando se trata de estas colecciones seguras de subprocesos? Especialmente, mientras haces algo iterando sobre ellos?

Set<KeyType> s = m.keySet(); synchronized(m) { for (KeyType k : s) foo(k); }

En este contexto, ¿se proporciona seguridad de subprocesos solo para ciertos tipos de operaciones?

¿Hay alguna manera de que podamos proporcionar colecciones seguras para hilos sin usar la sincronización? Estoy familiarizado con la palabra clave volátil que potencialmente se puede usar con valores primitivos para operaciones no atómicas.