Der Inhalt dieses Artikels befasst sich mit Java-Parallelitätslernen. Was ist Deadlock? Einführung in Deadlock. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.
Einführung in Deadlock:
Lock ist ein sehr nützliches Tool, das in vielen Szenarien ausgeführt werden kann, da es sehr einfach zu verwenden und leicht zu verstehen ist. Gleichzeitig kann es jedoch auch zu Problemen kommen, beispielsweise zu Deadlock-Problemen. Beispielsweise gibt es zwei Threads A und B, für deren Ausführung jeweils zwei Ressourcen a und b erforderlich sind. A erhält Ressource a und B erhält Ressource b. Dann fordert A Ressource b an und B fordert Ressource a an. Die beiden Threads blockieren sich gegenseitig und verursachen einen Deadlock.
Codebeispiel:
public calss DeadLockDemo{ private static String A = "A"; private static String B = "B"; public static void main(String[] args){ new DeadLockdemo().deadLock(); } private void deadLock(){ Thread t1 = new Thread(new Runnable(){ @Override public void run(){ synchronized(A){ try{ Thread.currentThread().sleep(2000); }catch(Exception e){ e.printStackTrace(); } synchronized(B){ System.out.println("B"); } } } }); Thread t2 = new Thread(new Runnable(){ @Override public void run(){ synchronized(B){ try{ Thread.currentThread().sleep(2000); }catch(Exception e){ e.printStackTrace(); } synchronized(A){ System.out.println("A"); } } } }); t1.start(); t2.start(); } }
Nach der Ausführung des obigen Codes tritt ein Deadlock auf und t1 und t2 blockieren sich gegenseitig.
Szenarioanalyse des Deadlocks:
In einem komplexeren Szenario kann ein solches Problem auftreten, nachdem t1 die Sperre aufgrund einiger abnormaler Bedingungen ohne Freigabe der Sperre erhalten hat (unendlich). Schleife). Oder t1 hat eine Datenbanksperre erhalten und beim Aufheben der Sperre wurde eine Ausnahme ausgelöst, die jedoch nicht freigegeben wurde.
Mehrere Möglichkeiten, einen Deadlock zu vermeiden:
1. Versuchen Sie zu vermeiden, dass ein Thread mehrere Sperren gleichzeitig erhält.
2. Versuchen Sie zu vermeiden, dass ein Thread mehrere Stützen gleichzeitig belegt, und versuchen Sie, nur eine Ressource gleichzeitig zu belegen.
3. Versuchen Sie, die Zeitsperre zu verwenden. Lock.tryLock(timeout) verwendet stattdessen den internen Sperrmechanismus.
4. Bei Datenbanksperren muss das Sperren und Entsperren innerhalb einer Datenbankverbindung erfolgen.
Das obige ist der detaillierte Inhalt vonWas ist ein Deadlock beim Java-Parallelitätslernen? Einführung in Deadlock. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!