¿Qué es este:Sincronización Java
synchronized (this) {
// ...some code...
}
bueno para? (¿Podría escribir un ejemplo?)
¿Qué es este:Sincronización Java
synchronized (this) {
// ...some code...
}
bueno para? (¿Podría escribir un ejemplo?)
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).
Impide el acceso concurrente a un recurso. Sun tiene un pretty good description con ejemplos.
De la desaparecida Java referencia rápida antes en http://www.janeg.ca/scjp/threads/synchronized.html
:
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.
Tenga en cuenta que los dos siguientes son equivalentes:
synchronized void someMethod() {
// ...
}
y
void someMethod() {
synchronized (this) {
// ...
}
}