- ¿Por qué utilizar una colección concurrente sobre una colección sincronizada?
Porque una colección synchronized
solo protege los datos contra la corrupción debido al acceso concurrente. Esto no significa que las colecciones synchronized
sean optimizadas para el acceso concurrente. Lejos de eso, de hecho, un ConcurrentMap.putIfAbsent
es un mecanismo mucho mejor para un compareAndSet
que bloquear todo Map
para lecturas.
- ¿Cuándo deberían preferirse las clases atómicas sobre el bloqueo explícito?
Los AtomicInteger
y AtomicLong
clases deben utilizarse siempre (en mi opinión) sobre el bloqueo a mano con una primitiva porque son más concisa. Considere:
synchronized (lock) {
int old = counter;
counter++;
return old;
}
Cuando se compara con:
int old = counter.getAndIncrement();
Tengo que decir sin embargo, que las clases sufren de la falta de waitability. Por ejemplo, a menudo quiere algún booleano sincronizado donde wait
en la condición booleana. Estos estaban disponibles como WaitableBoolean
en la antigua biblioteca de concurrencia de Doug Lea pero se descartaron en j.u.c
, no estoy seguro de por qué.
- ¿Cuándo se deben usar los bloqueos durante la sincronización?
Esta es una pregunta más complicada porque el uso de Locks
conlleva una sobrecarga. De hecho, a menudo se dice que no hay ninguna pinta en el uso de ReadWriteLock
en casos típicos. Un escenario donde deben usarse bloqueos es donde el bloqueo de un recurso y su desbloqueo no se puede hacer en el mismo alcance léxico. synchronized
es impotente para ayudar en casos como estos.
- ¿Cuáles son las alternativas para wait() y notify(), notifyAll()?
await
, signal
y signalAll
- cuándo debe utilizarse un CompletionService?
un servicio de terminación es útil en el caso en que el consumo de un resultado de un cálculo no tiene por qué ser visitada en el punto de presentación de la computación pero donde es importante que la finalización de la computación (o su resultado, o éxito) sea conocido por su programa. Esto podría ser, por ejemplo, para controlar la proporción de tareas fallidas (que arrojó excepciones), o puede ser para la limpieza de recursos.
Esto suena como preguntas de tarea. –
No realmente :) Solo una referencia rápida para elegir la herramienta correcta para el trabajo. – parkr
¿Entonces leyó el libro y todavía tiene estas preguntas? – pek