2009-08-24 13 views
6

¿Qué es este:Sincronización Java

synchronized (this) { 
    // ...some code... 
} 

bueno para? (¿Podría escribir un ejemplo?)

Respuesta

12

Impide que varios subprocesos ejecuten el código contenido entre los paréntesis. Mientras que un hilo está ejecutando ese código, el resto está bloqueado. Cuando se completa el primer subproceso, uno de los subprocesos bloqueados ejecutará el código sincronizado, y así sucesivamente.

¿Por qué quieres hacer esto? El código dentro del bloque puede modificar objetos de modo que estén en un estado incoherente hasta que los bloques salgan. Entonces, un segundo hilo que entraría encontraría objetos inconsistentes. A partir de ese punto, se produce el caos.

Un ejemplo sería eliminar un objeto de un grupo e insertarlo en otro. Puede que se ejecute un segundo subproceso mientras el primer subproceso mueve el objeto y, posteriormente, encuentra el objeto al que se hace referencia en ambas colecciones, o ninguno de los dos.

También puede usar este mecanismo para evitar que varios subprocesos accedan a un recurso diseñado para ser utilizado por un recurso (por ejemplo, una base de datos trivial).

0

De la desaparecida Java referencia rápida antes en http://www.janeg.ca/scjp/threads/synchronized.html:

hilos

Sincronización tiene el efecto de serializar el acceso a los bloques de código que se ejecuta en el hilo. Serializar en este contexto significa dando un hilo a la vez el derecho para ejecutar un bloque específico de código.

11

Tenga en cuenta que los dos siguientes son equivalentes:

synchronized void someMethod() { 
    // ... 
} 

y

void someMethod() { 
    synchronized (this) { 
     // ... 
    } 
} 
Cuestiones relacionadas