thread safety safe example español java multithreading thread-safety

safety - Sincronización de Java



thread safety php (4)

Que es esto:

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

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


De la ahora difunta Java Quick Reference anteriormente en http://www.janeg.ca/scjp/threads/synchronized.html :

La sincronización de subprocesos tiene el efecto de serializar el acceso a los bloques de código que se ejecutan en el subproceso. Serializar en este contexto significa dar un hilo a la vez el derecho de ejecutar un bloque específico de código.



Impide que varios subprocesos ejecuten el código contenido entre llaves. 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 utilizar este mecanismo para evitar que varios hilos accedan a un recurso diseñado para ser utilizado por un recurso (por ejemplo, una base de datos trivial).


Tenga en cuenta que los siguientes dos son equivalentes:

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

y

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