Estoy lidiando con una condición de carrera, creo, en mi GUI de JAVA.clases y sincronización anónimas de Java y "esto"
tengo algunos métodos que crean un "método anónimo" dentro de una clase anónima como esto:
synchronized foo()
{
someMethod(new TimerTask()
{
public synchronized run()
{
//stuff
}
};
}
pregunta: ¿Es ese método de ejecución sincronizada en el objeto TimerTask o la clase que foo es en?
PREGUNTA2: si eliminé el "sincronizado" en la declaración run(), y en su lugar tengo un bloque sincronizado (this) {} dentro del cuerpo run(), "this" se referiría al objeto TimerTask o al objeto que es una instancia del método que contiene foo()?
Por favor, ayúdenme aquí.
Gracias, JBU
Esto es un error que incluso aparece en el libro de Java Concurrency In Practice (JCiP). Es una pena que Java esté tan débilmente tipeado con respecto a sincronizado. –