1. Prozess-Deadlock und Lösungen
1. Kernpunkte
(1) Beherrschen Sie das Konzept des Deadlocks und das Auftreten von Deadlocks Die Grundursache der Sperre.
(2) Verstehen Sie die notwendigen Bedingungen für einen Deadlock – die folgenden vier Bedingungen müssen gleichzeitig erfüllt sein: gegenseitige Ausschlussbedingung, Nicht-Vorkaufsbedingung, Besitz- und Anwendungsbedingung und Schleifenwartebedingung.
(3) Erinnern Sie sich an die allgemeinen Methoden zur Lösung von Deadlocks und beherrschen Sie die Grundideen der Deadlock-Prävention und Deadlock-Vermeidung.
(4) Beherrschen Sie die Strategie der geordneten Ressourcenzuteilung in der Strategie zur Verhinderung von Deadlocks.
(5) Verstehen Sie das Konzept der Prozesssicherheitssequenz und die Beziehung zwischen Deadlock und Sicherheitssequenz.
(6) Verstehen Sie den Bankalgorithmus.
(7) Verstehen Sie das Ressourcenzuteilungsdiagramm.
(8) Verstehen Sie die Ideen der Deadlock-Erkennung und -Behebung.
2. Was Deadlock betrifft, mein persönliches Verständnis:
Nach einer gewissen Zeit des Studiums verstehe ich zum Beispiel, dass es zwei Prozesse gibt Jeder A-Prozess ist durch zwei Sperren gesperrt (Sperre 1, Sperre 2). Der Unterschied besteht darin, dass die Speicherorte der Sperranwendung in den beiden Prozessen unterschiedlich sind. Daher erfordert der vollständige Start eines Prozesses eine interne Sperre, und diese Sperre befindet sich zufällig in einem anderen Prozess. Die Sperre, die ein anderer Prozess benötigt, um den internen Prozess vollständig zu starten (oder auszuführen), befindet sich in einem anderen Programm. Auf diese Weise sind sie aneinander gebunden und befinden sich alle in einem Zustand der Vorbereitung, sind aber nicht in der Lage, sie auszuführen. Hat einen Deadlock-Zustand verursacht. Basierend auf meinem Verständnis habe ich ein schematisches Diagramm gezeichnet:
public class Test15 {public static void main(String[] args) throws InterruptedException {new Thread(new DeadLockThread(true)).start();//Thread.sleep(10);在中间用上它可以使结果交替出现,我是为了看死锁的效果,用它对比一下。new Thread(new DeadLockThread(false)).start(); } }class DeadLockThread implements Runnable {static Object o1 = new Object();static Object o2 = new Object();private boolean flag; DeadLockThread(boolean flag) {this.flag = flag; }public void run() {if (flag == true) {while (true) {synchronized (o1) { System.out.println("这是锁o1");synchronized (o2) { System.out.println("这是锁o2"); }
Ergebnisse drucken:
Das obige ist der detaillierte Inhalt vonDas Konzept und die Lösung von Deadlocks in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!