Heim > Java > javaLernprogramm > Hauptteil

Was ist ein Deadlock beim Java-Parallelitätslernen? Einführung in Deadlock

青灯夜游
Freigeben: 2018-10-22 17:48:13
nach vorne
2627 Leute haben es durchsucht

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 dem Login kopieren

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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!