Mi trovo in una condizione di gara, credo, nella mia GUI JAVA.classi java anonime e sincronizzazione e "questo"
Ho alcuni metodi che creano un "metodo anonimo" all'interno di una classe anonima come questa:
synchronized foo()
{
someMethod(new TimerTask()
{
public synchronized run()
{
//stuff
}
};
}
domanda: che metodo run sincronizzato sull'oggetto TimerTask o la classe che foo è in?
question2: se mi sono liberato del "sincronizzato" nella dichiarazione di run(), e invece hanno una (questo) {} blocco sincronizzato all'interno del) corpo (pista, sarebbe "questo" fare riferimento all'oggetto TimerTask o all'oggetto che è un'istanza del metodo che contiene foo()?
Per favore aiutatemi qui.
Grazie, JBU
Questo è un errore che appare anche nel libro Concurrency In Practice (JCiP) di Java. È un peccato che Java sia così debolmente tipizzato rispetto alla sincronizzazione. –