Skip to content
Snippets Groups Projects
Commit 0cda8993 authored by Sven Steddin's avatar Sven Steddin
Browse files

Zusaetzliches Beispiel zum Thema Circular Wait / Deadlock

parent 89474463
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="output" path="bin"/>
</classpath>
/bin/
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>ThreadDeadlock</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
/** Programm zur Demonstration ein Deadlocks
*
* Greifen unterschiedliche Threads auf mehrere gemeinsam genutzte Resourcen zu, dann
* kann dies zu Verklemmungen fhren. Durch vorgegebene Reihenfolge beim Zugriff lsst sich
* das Problem beheben.
*
* @author stedS
* @version 2.0 (2021-01-25)
*/
package inf3;
public class ThreadDeadlock {
public static void main(String[] args) {
Object teigschuessel = new Object();
Object ruehrgeraet = new Object();
Thread_Koch1 kochA = new Thread_Koch1(teigschuessel, ruehrgeraet);
Thread_Koch2 kochB = new Thread_Koch2(teigschuessel, ruehrgeraet);
//Thread_Koch1 kochB = new Thread_Koch1(teigschuessel, ruehrgeraet);
kochA.start();
kochB.start();
try {
kochA.join();
kochB.join();
} catch (InterruptedException e) {
System.out.println("join interrupted");
}
System.out.println("Kuchen fertig");
}
}
package inf3;
public class Thread_Koch1 extends Thread {
Object teigschuessel;
Object ruehrgeraet;
Thread_Koch1 (Object teigschuessel, Object ruehrgeraet) {
this.teigschuessel = teigschuessel;
this.ruehrgeraet = ruehrgeraet;
}
public void run() {
synchronized (teigschuessel) {
System.out.println(this.getName() + " hat Teigschssel und wartet auf Rhrgert");
try {
Thread.sleep(200);
} catch (InterruptedException e) { }
synchronized (ruehrgeraet) {
System.out.println(this.getName() + " rhrt Teig");
try {
Thread.sleep(200);
} catch (InterruptedException e) { }
}
}
}
}
package inf3;
public class Thread_Koch2 extends Thread {
Object teigschuessel;
Object ruehrgeraet;
Thread_Koch2 (Object teigschuessel, Object ruehrgeraet) {
this.teigschuessel = teigschuessel;
this.ruehrgeraet = ruehrgeraet;
}
public void run() {
synchronized (ruehrgeraet) {
System.out.println(this.getName() + " hat Rhrgert und wartet auf Teigschssel");
try {
Thread.sleep(200);
} catch (InterruptedException e) { }
synchronized (teigschuessel) {
System.out.println(this.getName() + " rhrt Teig");
try {
Thread.sleep(200);
} catch (InterruptedException e) { }
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment