2011-07-09 13 views
10

Cuando debemos usar ReentrantReadWriteLock en comparación con sincronizada palabra clave en el entorno multihilo en Java?ReentrantReadWriteLock vs sincronizado

¿Cuáles son los beneficios de usar ReentrantReadWriteLock sobre sincronizada en Java?

¿Alguien puede dar un ejemplo también (en Java)?

Gracias!

+1

Le recomendamos que lea este hilo y luego vea si hay una forma mejor de expresar su pregunta, ya que lo mejor dependerá de lo que esté haciendo, cómo su código está accediendo a objetos/variables. http://forum.ragezone.com/f683/synchronised-vs-reentrantlocks-696540/ –

Respuesta

18

Sincronizado permite en un hilo a la vez.

Los bloqueos de lectura/escritura permiten múltiples lectores al mismo tiempo, pero solo si ya no hay escritores. Por lo tanto, en algunos escenarios de uso podemos obtener una mejor concurrencia, porque las poblaciones de lectores pueden avanzar juntas.

La API de Java documentation da el ejemplo de clases de colección que se espera que tengan más lectores que escritores.

11

El locking article by Brian explica en detalle los pros y los contras de cada enfoque.

marco El bloqueo es un reemplazo compatible para la sincronización, que ofrece muchas características que no proporcionados por sincronizado, así como implementaciones que ofrecen un mejor rendimiento en contención. Sin embargo, la existencia de estos obvios beneficios no es una buena razón para para preferir siempre ReentrantLock a sincronizado. En su lugar, tome la decisión en función de si necesita el poder de ReentrantLock. En la gran mayoría de los casos, no - la sincronización funciona solo bien, funciona en todas las JVM, se entiende por un rango más amplio de desarrolladores, y es menos propenso a errores. Guardar bloqueo para cuando realmente lo necesite. En esos casos, , se alegrará de tenerlo.

Cuestiones relacionadas