ciao
ho un dubbio.. se in un codice ho una parte che è nel synchronize(this) quando i entra un thread anche tutti gli altri synchronized sono bloccati?
ad esempio:
se io ho
public void a(){
synchronized (this){
some operations()
a=5;
....
}
}
public void b(){
synchronized (lock1){
lock1.some operations()
a++
...
}
}
public void c(){
synchronized (lock1){
lock1.some operations()
a++
...
}
}
ecco di solito io sapevo che il synchronized su lock1 impedisce a + thread di entrare in c, la stessa cosa per b. Inoltre impedisce anche ad un'altro thread di entrare in b se un'altro thread è già entrato in c o viceversa (perchè b e c sono sincronizzati sullo stesso oggetto cioè lock1). Ma nel caso di this cioè se un thread è in this l'oggetto per intero (quella istanza ) è bloccata ma quindi non entra nessun thread neanche in b e c giusto? quindi se io assegno a =5 invicando a, non può succedere che un'altro thread nel frattempo che entra in b o c sovrascriva a e quindi il valore di a potrebbe essere non quello del flusso di esecuzione atteso se tutto fosse sincronizzato nel modo corretto?
grazie
Roby
|