Nach meinem Verständnis, sollte das folgende Stück Code zu einem Deadlock führen. Der Grund dafür ist, dass, wenn der Thread t1 das statische Objekt firstData sperrt, er eine Sperre für die Klasse erhalten hat. Wenn er also versucht, ein anderes statisches Objekt secondData zu sperren, sollte die Anforderung blockieren.Locking statische Mitglieder einer Klasse
jedoch läuft das Programm fein und druckt *** Successfully acquired both the locks
Was ist das statische Objekte zu Sperren, die fehlen im hier?
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");
}
}
}
}
Für alle, die antworteten, dass die Sperren Objekt sind, statt Klasse, nehmen Sie bitte einen Blick auf this
Auch ein einzelner Thread wird niemals einen Deadlock erzeugen. –
Der folgende Link hat mich glauben lassen: http://stackoverflow.com/questions/437620/java-synchronized-methods-lock-on-object-or-class –
Ich stimme @KirkWoll. Aber ich habe eine Frage. Bedeutet das, dass ein Thread mehrere statische Objekte gleichzeitig sperren kann? – noMAD