viernes, 7 de diciembre de 2012

Mejora del Proyecto F


Al agregar elementos a la interfaz ya en ejecución se presenta esta excepcion 



La sincronización surge debido a la necesidad de evitar que dos o más threads traten de acceder 
a los mismos recursos al mismo tiempo. Por ejemplo si un  thread tratara de escribir en un 
fichero y otro thread estuviera al mismo tiempo tratando de borrar dicho fichero, se produciría 
una situación no deseada. También habría que sincronizar hilos cuando un thread debe esperar a 
que estén preparados los datos que le debe suministrar otro thread. Para solucionar estos tipos 
de problemas es importante poder sincronizar los distintos threads. 
Las secciones de código de un programa que acceden a un mismo recurso (un mismo 
objeto de una clase, un fichero del disco, etc.) desde dos threads distintos se denominan 
secciones críticas. Para sincronizar dos o más  threads, hay que utilizar el modificador 
synchronized en aquellos métodos del objeto o recurso con los que puedan producirse 
situaciones conflictivas. De esta forma Java bloquea, asocia un bloqueo o  lock, el recurso 
sincronizado. Por ejemplo: 
public synchronized void metodoSincronizado() { 
   ...// código de la sección critica 
}
La sincronización previene las interferencias solamente sobre un tipo de recurso: la 
memoria reservada para un objeto. Cuando se prevea que unas determinadas variables de una 
clase pueden tener problemas de sincronización, se deberán declarar como  private o 
protected. Así solamente serán accesibles a través  de métodos de la clase, los cuales 
deberán estar sincronizados. Es muy importante tener en cuenta que si se sincronizan algunos 
métodos de un objeto pero otros no, el programa puede que no funcione correctamente. La 
razón es que los métodos no sincronizados pueden acceder libremente a las variables miembro 
ignorando el bloqueo del objeto, sólo los métodos sincronizados comprueban si un objeto está 
bloqueado.  


Referencias
REF1


REF2

Multihilo en Java
Raúl Herrero Pascual
Rubén Montero Diez


Programación Orientada a Objetos
Trabajo Teórico
Mayo, 2004