Ya existen muchas implementaciones en el paquete java.util.concurrent
. P.ej. - ArrayBlockingQueue
, DelayQueue
, LinkedBlockingQueue
, PriorityBlockingQueue
, SynchronousQueue
.
También wait()
y notify()
no se han reemplazado. Se han introducido nuevas utilidades que proporcionan funcionalidades adicionales y beneficios de rendimiento. Ver por ejemplo el paquete java.util.concurrent.locks
.
Le recomendaría que lea this introducción. Proporciona una visión general alta que debe responder a su pregunta.
Saludos.
Edición 1: Ok, entonces, por ejemplo, se puede utilizar una implementación de java.util.concurrent.locks .Lock
para implementar una operación de retirada de cola que los tiempos de espera y en el mismo tiempo equidad subvenciones a las roscas acceso a la cola. Tal implementación es ReentrantLock
que tiene un constructor que acepta la política de equidad. El tiempo tryLock()
favorece esta propiedad. También puede agregar algún soporte de depuración para contar los hilos de espera en la cola, etc. Esto sería mucho más difícil de implementar simplemente con wait()
y notify()
supongo.
En conclusión ReentrantLock
es "mejor" que las contrapartes de bajo nivel en sus capacidades extendidas. El comportamiento básico es el mismo sin embargo. Si no necesita estos extras, wait()
y notify()
son una alternativa aceptable.
No implementaría una cola sincronizada. Utilizaría una de las muchas implementaciones de BlockingQueue: http://download.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html –
@Mike - Me estoy preparando para entrevistas de trabajo . En la vida real, usaría algo existente en lugar de reinventar. – ripper234
Entonces me temo que no entiendo la pregunta. Los bloques sincronizados y wait/notify han sido reemplazados por abstracciones de mayor nivel en la forma de las clases en el paquete java.util.concurrent, no por nuevas construcciones de lenguaje. Si la intención de la pregunta es hacer uso de algunas de las clases java.util.concurrent, ¿con cuáles excluimos la respuesta? –