diff --git a/VL04_09/ThreadDeadlock/.classpath b/VL04_09/ThreadDeadlock/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..fceb4801b5ffa0e4a68c2b00441e45bf2eefdbed
--- /dev/null
+++ b/VL04_09/ThreadDeadlock/.classpath
@@ -0,0 +1,6 @@
+<?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>
diff --git a/VL04_09/ThreadDeadlock/.gitignore b/VL04_09/ThreadDeadlock/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ae3c1726048cd06b9a143e0376ed46dd9b9a8d53
--- /dev/null
+++ b/VL04_09/ThreadDeadlock/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/VL04_09/ThreadDeadlock/.project b/VL04_09/ThreadDeadlock/.project
new file mode 100644
index 0000000000000000000000000000000000000000..6e4548f093cfa723624fff089f638bc0c5dd9b86
--- /dev/null
+++ b/VL04_09/ThreadDeadlock/.project
@@ -0,0 +1,17 @@
+<?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>
diff --git a/VL04_09/ThreadDeadlock/.settings/org.eclipse.jdt.core.prefs b/VL04_09/ThreadDeadlock/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..3a21537071bf4118b9e1ee864cb4bc258aa48211
--- /dev/null
+++ b/VL04_09/ThreadDeadlock/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+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
diff --git a/VL04_09/ThreadDeadlock/src/inf3/ThreadDeadlock.java b/VL04_09/ThreadDeadlock/src/inf3/ThreadDeadlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..1994fddc0cbe24bfcd7bcf250b2bcf1e1a448f72
--- /dev/null
+++ b/VL04_09/ThreadDeadlock/src/inf3/ThreadDeadlock.java
@@ -0,0 +1,30 @@
+/** Programm zur Demonstration ein Deadlocks
+ * 
+ * Greifen unterschiedliche Threads auf mehrere gemeinsam genutzte Resourcen zu, dann
+ * kann dies zu Verklemmungen führen. Durch vorgegebene Reihenfolge beim Zugriff lässt 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");
+	}
+}
+
+
diff --git a/VL04_09/ThreadDeadlock/src/inf3/Thread_Koch1.java b/VL04_09/ThreadDeadlock/src/inf3/Thread_Koch1.java
new file mode 100644
index 0000000000000000000000000000000000000000..00f9a26ffd744f59f44218df42116c40241cda11
--- /dev/null
+++ b/VL04_09/ThreadDeadlock/src/inf3/Thread_Koch1.java
@@ -0,0 +1,25 @@
+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 Teigschüssel und wartet auf Rührgerät");
+			try {
+				Thread.sleep(200);
+			} catch (InterruptedException e) { 	}
+			synchronized (ruehrgeraet) {
+				System.out.println(this.getName() + " rührt Teig");	
+				try {
+					Thread.sleep(200);
+				} catch (InterruptedException e) { 	}
+			}
+		}
+	}
+}
+
diff --git a/VL04_09/ThreadDeadlock/src/inf3/Thread_Koch2.java b/VL04_09/ThreadDeadlock/src/inf3/Thread_Koch2.java
new file mode 100644
index 0000000000000000000000000000000000000000..34ce58ad649f8e2ed11cf738473f320d8aa9928d
--- /dev/null
+++ b/VL04_09/ThreadDeadlock/src/inf3/Thread_Koch2.java
@@ -0,0 +1,25 @@
+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 Rührgerät und wartet auf Teigschüssel");
+			try {
+				Thread.sleep(200);
+			} catch (InterruptedException e) { 	}
+			synchronized (teigschuessel) {
+				System.out.println(this.getName() + " rührt Teig");	
+				try {
+					Thread.sleep(200);
+				} catch (InterruptedException e) { 	}
+			}
+		}
+	}
+}
+