Da quello che ho capito il seguente codice non è efficiente:Dovrei cercare di evitare metodo sincronizzato static
class Foo {
static Resource resource1;
static Resource resource2;
static synchronized void methodA() {
resource1.add("abc");
}
static synchronized void methodB() {
resource2.add("abc");
}
}
Da quanto ho capito, entrambi i metodi bloccare in un singolo oggetto (l'oggetto di classe Foo.class
), quindi suppongo che quanto segue sia una buona ottimizzazione?
class Foo {
static Resource resource1;
static Resource resource2;
static void methodA() {
synchronized(resource1) {
resource1.add("abc");
}
}
static void methodB() {
synchronized(resource2) {
resource2.add("123");
}
}
}
Fintanto che le due risorse non dipendono l'una dall'altra.
Quando devo considerare l'utilizzo del metodo sincronizzato statico?