Secondo la mia comprensione, il seguente codice dovrebbe comportare un deadlock. Il motivo è che, quando il thread t1 blocca oggetto firstData, ha acquisito un blocco sulla classe. Quindi, quando tenta di bloccare un altro oggetto statico secondoData, la richiesta dovrebbe bloccarsi.Blocco di membri statici di una classe
Tuttavia, il programma funziona bene e stampe *** Successfully acquired both the locks
cosa si tratta blocco oggetti statici che im manca qui?
public class Deadlock {
public static void main(String[] args) {
Thread t1 = new Thread(new DeadlockRunnable());
t1.start();
}
}
class DeadlockRunnable implements Runnable {
static Object firstData = new Object();
static Object secondData = new Object();
public void run() {
synchronized(firstData) {
synchronized(secondData) {
System.out.println("*** Successfully acquired both the locks");
}
}
}
}
Per tutti coloro che hanno risposto che le serrature sono in oggetto, invece che di classe, si prega di dare un'occhiata a this
Inoltre, un singolo thread non produrrà mai un deadlock. –
Il seguente collegamento mi ha fatto credere così: http://stackoverflow.com/questions/437620/java-synchronized-methods-lock-on-object-or-class –
Sono d'accordo con @KirkWoll. Ma ho una domanda. Questo significa che un thread può bloccare più oggetti statici contemporaneamente? – noMAD