usar sirve que productores productor procesos para lock hilos example ejemplo cuando consumidores consumidor java thread-synchronization

sirve - synchronized java netbeans



código de ejemplo para mostrar cómo funciona el bloque sincronizado de Java (4)

Estoy aprendiendo java multi-threading, encontré que es difícil entender cómo funciona el bloque sincronizado:

synchronized(Object o){ // do something }

Por favor, indique algún código de ejemplo que pueda mostrarme que el objeto o está bloqueado. ¿Cómo entiendo esto, se bloqueará el acceso al objeto o desde otro hilo mientras se excuye el bloque sincronizado?


La sincronización en Java es un concepto importante, ya que Java es un lenguaje de múltiples subprocesos en el que múltiples subprocesos se ejecutan en paralelo para completar la ejecución del programa. En el entorno de subprocesos múltiples, la sincronización del objeto java o la sincronización de la clase java se vuelve extremadamente importante. La sincronización en Java es posible mediante el uso de la palabra clave java "sincronizada" y "volátil". El acceso simultáneo de objetos compartidos en Java introduce una especie de errores: errores de interferencia de hilos y de consistencia de memoria y para evitar estos errores, debe sincronizar correctamente su objeto java Permitir el acceso mutuo exclusivo de la sección crítica a dos hilos.

Lea más: http://javarevisited.blogspot.com/2011/04/synchronization-in-java-synchronized.html#ixzz2LOWwnCjH

Por favor mira este Example


Como la mayoría de las respuestas han cubierto lo que significa sincronizado, quiero agregar un punto adicional que no se menciona. Sincronizar un método o encerrar un bloque con sincronizado garantiza que la operación / conjunto de operaciones se ejecute como una sola operación atómica, para ser más precisos cuando un hilo está ejecutando un bloque de sincronización en un objeto que ningún otro hilo puede ingresar al bloque hasta que el hilo uno completa su Ejecute y libera el bloqueo que mantiene al ingresar al bloque.

Por lo tanto, el bloque de sincronización garantiza la atomicidad de un montón de declaraciones de código.

a diferencia de lo que especificó @lucifier, Sincronización y volatilidad no sirven para el mismo propósito, volatile tiene la intención de garantizar que dos subprocesos se comuniquen entre sí y obtengan el mayor valor de actualización de la memoria principal en lugar de acceder a un valor desde caché individual. Asegura el comportamiento de "sucede antes" para una ejecución.

Por ejemplo, definir una variable como volátil (volátil int i = 10;) al realizar una operación de incremento (i ++;) en un método no sincronizado no da el mismo comportamiento cuando (i ++) se encuentra dentro de un bloque sincronizado.


La palabra clave sincronizada se puede aplicar a métodos estáticos / no estáticos o a un bloque de código. Solo un hilo a la vez puede acceder a los métodos sincronizados y si hay varios subprocesos que intentan acceder al mismo método, entonces otros hilos deben esperar la ejecución del método por un solo hilo. La palabra clave sincronizada proporciona un bloqueo en el objeto y por lo tanto evita la condición de carrera

Ejemplo simple:

public void synchronized method(){} public void synchronized staticmethod(){} public void myMethod(){ synchronized (this){ // synchronized keyword on block of code } }

Más explicaciones sobre bloque sincronizado y método:
El bloque sincronizado puede elegir en qué objeto se sincroniza. Un método sincronizado solo puede usar ''this'' (o la instancia de clase correspondiente para un método de clase sincronizado). Por ejemplo, estos son semánticamente equivalentes:

synchronized void foo() { ... } void foo() { synchronized (this) { ... } }

Este último es más flexible, ya que puede competir por el bloqueo asociado de cualquier objeto, a menudo una variable miembro. También es más granular porque podría tener un código concurrente ejecutándose antes y después del bloqueo pero aún dentro del método. Por supuesto, usted podría usar un método sincronizado con la misma facilidad al refactorizar el código concurrente en métodos no sincronizados separados. Use lo que haga que el código sea más comprensible.


La sincronización describe que si un objeto o un bloque se declara como sincronizado, entonces solo un proceso puede acceder a ese objeto o bloque a la vez. Ningún otro proceso puede tomar el objeto o bloque hasta que esté disponible. Internamente, cada objeto tiene un indicador llamado "bloqueo" "tiene dos estados establecidos y restablecidos. cuando un proceso solicita un objeto, se comprueba si el valor de bloqueo se establece o restablece. Dependiendo de eso, un objeto está disponible para un proceso en sincronización. Para una mejor comprensión con el ejemplo puedes ver este enlace. introduzca la descripción del enlace aquí