In primo luogo, here's a sample:Come funziona sincronizzata lavoro in Java
public class Deadlock {
static class Friend {
private final String name;
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public synchronized void bow(Friend bower) {
System.out.format("%s: %s has bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
}
public synchronized void bowBack(Friend bower) {
System.out.format("%s: %s has bowed back to me!%n",
this.name, bower.getName());
}
}
public static void main(String[] args) {
final Friend alphonse = new Friend("Alphonse");
final Friend gaston = new Friend("Gaston");
new Thread(new Runnable() {
public void run() { alphonse.bow(gaston); }
}).start();
new Thread(new Runnable() {
public void run() { gaston.bow(alphonse); }
}).start();
}
}
Quello che non capisco è come si verifica il blocco. La funzione principale avvia due thread che ognuno inizia i propri archi.
Che cosa fa esattamente il blocco "sincronizzato"? La stessa funzione in esecuzione per lo stesso oggetto (come inizialmente pensavo)? La stessa funzione per tutti gli oggetti della stessa classe? Tutte le funzioni sincronizzate per lo stesso oggetto? Tutte le funzioni sincronizzate per tutti gli oggetti della stessa classe?
Aiutatemi qui.
Oh ok. Quindi il lucchetto appartiene all'intero oggetto. Non so perché ho pensato che fossero solo chiamate allo stesso metodo sincronizzato per un dato oggetto che sono bloccate. Immagino che risponda alla mia domanda. –
L'oggetto non esegue sincronizzazione/blocco, ma è il thread. –
In realtà, ho parlato in modo specifico del Thread acquisendo il lock, ma vedo che alcune delle mie lingue sono inesatte. Lo renderò più chiaro. – Eddie