Questo dipende. Potrebbero esserci problemi se qualcosa accade tra le chiamate a A
e B
? Se è così, allora C
dovrebbe essere sincronizzato.
public class SomeClass{
private int i;
public synchronized void A(){
i += 1;
}
public synchronized void B(){
print i; // uses something modified by A
}
public void C(){ // unsynchronized so...
A();
// ...i could be changed here by another thread, affecting what B prints
B();
}
}
Se non ci sono sezioni critiche tra A
e B
, allora C
non ha bisogno di essere sincronizzato.
public class SomeClass{
private int i;
public synchronized void A(){
i += 1;
}
public synchronized void B(){
print "B"; // unrelated to what A does
}
public void C(){
A();
// i could be changed here, but won't affect B
B();
}
}