diff --git a/VL04_09/ThreadDurchInterface_1/.classpath b/VL04_09/ThreadDurchInterface_1/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..63b7e892d1ebf1eeb9df3d8d71e5bedb134487c1
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_1/.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/ThreadDurchInterface_1/.project b/VL04_09/ThreadDurchInterface_1/.project
new file mode 100644
index 0000000000000000000000000000000000000000..999d84145d51ea1967f03dc2831ba66fd262e803
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_1/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>ThreadDurchInterface_1</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/ThreadDurchInterface_1/.settings/org.eclipse.jdt.core.prefs b/VL04_09/ThreadDurchInterface_1/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..bb35fa0a87b032ee9d0b128004c1edbd464f07bf
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_1/.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/ThreadDurchInterface_1/src/MyThreads/MyInputClass.java b/VL04_09/ThreadDurchInterface_1/src/MyThreads/MyInputClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d9713e8e8fcd1bc5b87f50f617ff325dfda85e8
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_1/src/MyThreads/MyInputClass.java
@@ -0,0 +1,17 @@
+package MyThreads;
+import java.util.Scanner;
+/** Der Thread wartet auf eine Eingabe von der Tastatur. Der Thread bricht mit einer Exception ab,
+ * wenn Zeichen eingegeben werden, die keine Zahlen sind, so dass die Zahlenkonvertierung fehlschlägt.
+ * @author stedS
+ */
+public class MyInputClass extends Thread {
+
+	public void run() {
+		Scanner myScanner = new Scanner(System.in);
+		int ii = 0;
+		while (true) {
+			ii = myScanner.nextInt();
+			System.out.println("\nEingabe: " + ii);		
+}}}
+
+
diff --git a/VL04_09/ThreadDurchInterface_1/src/MyThreads/MyOutputClass.java b/VL04_09/ThreadDurchInterface_1/src/MyThreads/MyOutputClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..c80314be56b57ff049982d9ef8857a9f3de835fb
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_1/src/MyThreads/MyOutputClass.java
@@ -0,0 +1,35 @@
+package MyThreads;
+/** Der Thread gibt nach Ablauf einer Zählschleife den Text aus, mit dem er
+ * initialisiert wurde.
+ * @author stedS
+ */
+public class MyOutputClass implements Runnable {
+	private String text;
+	private final int COUNT;
+	
+	MyOutputClass(String text, int count)
+	{
+		this.text = text;
+		COUNT = count;
+	}
+	
+	public void run() {
+		long kk = 0;
+		int ll = COUNT;
+		while (true) {
+			if (kk++ % 20_000_000 == 0) {
+				if (ll != 0) {					
+					System.out.print(text + ll + " ");
+					ll--;
+				} else {
+					System.out.println(text + ll + "newline ");
+					ll=COUNT;
+				}
+			}
+		}		
+	}
+}
+
+
+
+
diff --git a/VL04_09/ThreadDurchInterface_1/src/MyThreads/ThreadDurchInterface_1.java b/VL04_09/ThreadDurchInterface_1/src/MyThreads/ThreadDurchInterface_1.java
new file mode 100644
index 0000000000000000000000000000000000000000..67cd421493f87bd56af78d3cca2c3b9bbe7bf9a9
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_1/src/MyThreads/ThreadDurchInterface_1.java
@@ -0,0 +1,33 @@
+/** Programm zur Demonstration von Runnable. 
+ * 
+ * @author stedS
+ * @version 1.0 (2017-01-12) 
+ */
+package MyThreads;
+public class ThreadDurchInterface_1 {
+	/** Hauptprogramm legt 3 Threads an, von denen 2 Threads die run-Methode 
+	 * einer Klasse verwenden, welche das Interface Runnable implementiert.
+	 * @param args Es werden keine Runtimeparameter verwendet
+	 * @author stedS
+	 */
+	public static void main(String[] args) {
+		final int COUNT = 5;
+
+		//Objekte anlegen, die keine Unterklassen von Thread sind 
+		//dafür aber das Interface Runnable unterstützen: 
+		MyOutputClass myRunnable1 = 	new MyOutputClass("Hallo", COUNT);
+		MyOutputClass myRunnable2 = 	new MyOutputClass("Meti", COUNT);		
+		
+		//nun alle gewünschten Threads anlegen:
+		MyInputClass myThread1 	= new MyInputClass();
+		Thread myThread2 		= new Thread(myRunnable1);
+		Thread myThread3 		= new Thread(myRunnable2);
+		
+		//nun alle Thread-Objekte starten
+		myThread1.start();
+		myThread2.start();
+		myThread3.start();
+	}
+}
+
+
diff --git a/VL04_09/ThreadDurchInterface_2/.classpath b/VL04_09/ThreadDurchInterface_2/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..63b7e892d1ebf1eeb9df3d8d71e5bedb134487c1
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_2/.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/ThreadDurchInterface_2/.project b/VL04_09/ThreadDurchInterface_2/.project
new file mode 100644
index 0000000000000000000000000000000000000000..1801890251c6d48781fdc5f7f82b01d517315796
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_2/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>ThreadDurchInterface_2</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/ThreadDurchInterface_2/.settings/org.eclipse.jdt.core.prefs b/VL04_09/ThreadDurchInterface_2/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..bb35fa0a87b032ee9d0b128004c1edbd464f07bf
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_2/.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/ThreadDurchInterface_2/src/MyThreads/MyInputClass.java b/VL04_09/ThreadDurchInterface_2/src/MyThreads/MyInputClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5b07fa2a365a740f86ce707b642b216149d2bd9
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_2/src/MyThreads/MyInputClass.java
@@ -0,0 +1,19 @@
+package MyThreads;
+import java.util.Scanner;
+/** Der Thread wartet auf eine Eingabe von der Tastatur. Der Thread bricht mit einer Exception ab,
+ * wenn Zeichen eingegeben werden, die keine Zahlen sind, so dass die Zahlenkonvertierung fehlschlägt.
+ * @author stedS
+ */
+public class MyInputClass extends Thread {
+
+	public void run() {
+		Scanner myScanner = new Scanner(System.in);
+		int ii = 0;
+		while (true) {
+			ii = myScanner.nextInt();
+			System.out.println("\nEingabe: " + ii);		
+		}
+	}
+}
+
+
diff --git a/VL04_09/ThreadDurchInterface_2/src/MyThreads/MyOutputClass.java b/VL04_09/ThreadDurchInterface_2/src/MyThreads/MyOutputClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ecd2d9670a405208e37e27803e8e67529bca22e
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_2/src/MyThreads/MyOutputClass.java
@@ -0,0 +1,28 @@
+package MyThreads;
+/**
+ * Subklassen dieser Klasse erben die Implemtierung von Runnable.
+ * @author stedS
+ *
+ */
+public class MyOutputClass implements Runnable {
+	private String text;
+	int cnt = 0;
+	
+	MyOutputClass(String text)
+	{
+		this.text = text;
+	}
+	
+	protected void MachWas() 
+	{ /*kann in der Kindklasse modifiziert werden*/ };
+	
+	public void run() {
+		long kk = 0;
+		while (true) {
+			if (kk++ % 10_000_000 == 0) {
+				cnt++;
+				System.out.print(text + " ");
+				MachWas();
+}}}}
+
+
diff --git a/VL04_09/ThreadDurchInterface_2/src/MyThreads/MyOutputClassChild.java b/VL04_09/ThreadDurchInterface_2/src/MyThreads/MyOutputClassChild.java
new file mode 100644
index 0000000000000000000000000000000000000000..7eb6c56ca1f85204e033d854a0565fcc89fcafc4
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_2/src/MyThreads/MyOutputClassChild.java
@@ -0,0 +1,23 @@
+package MyThreads;
+/**
+ * Die Klasse zeigt, dass man die Inplementierung der Schnittstelle Runnable 
+ * von seiner Elternklasse erben kann.
+ * @author stedS
+ */
+public class MyOutputClassChild extends MyOutputClass {
+	
+	private int crlfCnt = 0;
+	
+	public MyOutputClassChild(String text, int cnt) {
+		super(text);
+		crlfCnt = cnt;
+	}
+
+	@Override
+	protected void MachWas() {
+		if (crlfCnt != 0) {
+			if (cnt % crlfCnt == 0) {
+				System.out.println("CRLF");
+}}}}
+
+
diff --git a/VL04_09/ThreadDurchInterface_2/src/MyThreads/ThreadDurchInterface_2.java b/VL04_09/ThreadDurchInterface_2/src/MyThreads/ThreadDurchInterface_2.java
new file mode 100644
index 0000000000000000000000000000000000000000..d304de836a9f14286ca006dec0fe643f74075bb9
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_2/src/MyThreads/ThreadDurchInterface_2.java
@@ -0,0 +1,34 @@
+/** Programm zur Demonstration des Einsatzes von Runnable: Die Klasse,
+ * welche an den Thread übergeben wird erbt die Methode run() und damit die
+ * Implementierung der Schnittstelle Runnable von seiner Elternklasse. 
+ * 
+ * @author stedS
+ * @version 1.0 (2017-01-12) 
+ */
+package MyThreads;
+public class ThreadDurchInterface_2 {
+	/** Hauptprogramm legt 3 Threads an, von denen 2 Threads die run-Methode 
+	 * einer Klasse verwenden, welche das Interface Runnable implementiert.
+	 * @param args Es werden keine Runtimeparameter verwendet
+	 * @author stedS
+	 */
+	public static void main(String[] args) {
+
+		//zuerst die Objekte anlegen, die von Thread nicht erben können
+		//aber dafür das Interface Runnable unterstützen: 
+		MyOutputClassChild myRunnable1 	= new MyOutputClassChild("Hallo",4);
+		MyOutputClass myRunnable2 		= new MyOutputClass("Meti");		
+		
+		//nun alle gewünschten Threads anlegen:
+		MyInputClass myThread1 	= new MyInputClass();
+		Thread myThread2 		= new Thread(myRunnable1);
+		Thread myThread3 		= new Thread(myRunnable2);
+		
+		//Thread-Objekte starten
+		myThread1.start();
+		myThread2.start();
+		myThread3.start();
+	}
+}
+
+
diff --git a/VL04_09/ThreadDurchInterface_3/.classpath b/VL04_09/ThreadDurchInterface_3/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..63b7e892d1ebf1eeb9df3d8d71e5bedb134487c1
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_3/.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/ThreadDurchInterface_3/.project b/VL04_09/ThreadDurchInterface_3/.project
new file mode 100644
index 0000000000000000000000000000000000000000..bd8161112103ab4aa1187bd479103a4a425dae1d
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_3/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>ThreadDurchInterface_3</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/ThreadDurchInterface_3/.settings/org.eclipse.jdt.core.prefs b/VL04_09/ThreadDurchInterface_3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..bb35fa0a87b032ee9d0b128004c1edbd464f07bf
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_3/.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/ThreadDurchInterface_3/src/MyThreads/MyInputClass.java b/VL04_09/ThreadDurchInterface_3/src/MyThreads/MyInputClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5e382a61de3c2b665dffcfae43cd19648d877ab
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_3/src/MyThreads/MyInputClass.java
@@ -0,0 +1,19 @@
+package MyThreads;
+import java.util.Scanner;
+/** Der Thread wartet auf eine Eingabe von der Tastatur. Der Thread bricht mit einer Exception ab,
+ * wenn Zeichen eingegeben werden, die keine Zahlen sind, so dass die Zahlenkonvertierung fehlschlägt.
+ * @author stedS
+ */
+public class MyInputClass extends Thread {
+
+	public void run() {
+		Scanner myScanner = new Scanner(System.in);
+		int ii = 0;
+		while (true) {
+			ii = myScanner.nextInt();
+			System.out.println("\nEingabe: " + ii);	
+		}
+	}
+}
+
+
diff --git a/VL04_09/ThreadDurchInterface_3/src/MyThreads/MyOutputClass.java b/VL04_09/ThreadDurchInterface_3/src/MyThreads/MyOutputClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..89719abcbb02effe867f33220157feb9cac3d39b
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_3/src/MyThreads/MyOutputClass.java
@@ -0,0 +1,30 @@
+package MyThreads;
+/** Die Klasse definiert die Methode MachWas() als abstract. Sie muss von einer Kindklasse 
+ * überschrieben werden. Die Nachkommen dieser Klasse erben wiederum die Implementierung 
+ * der Schnittstelle Runnable.
+ * @author stedS
+ */
+public abstract class MyOutputClass {
+	private String text;
+	int cnt = 0;
+	
+	MyOutputClass(String text)
+	{
+		this.text = text;
+	}
+	
+	protected abstract void MachWas();
+	
+	public void run() {
+		long kk = 0;
+		while (true) {
+			if (kk++ % 1_000_000 == 0) {
+				cnt++;
+				System.out.print(text + " ");
+				MachWas();
+			}
+		}		
+	}
+}
+
+
diff --git a/VL04_09/ThreadDurchInterface_3/src/MyThreads/MyOutputClassChild.java b/VL04_09/ThreadDurchInterface_3/src/MyThreads/MyOutputClassChild.java
new file mode 100644
index 0000000000000000000000000000000000000000..53ddd642e84edb73440fb1f74b71169a4efd1ce2
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_3/src/MyThreads/MyOutputClassChild.java
@@ -0,0 +1,22 @@
+package MyThreads;
+/**
+ * Die Klasse zeigt, dass man die Inplementierung der Schnittstelle Runnable 
+ * von seiner Elternklasse erben kann.
+ * @author stedS
+ */
+public class MyOutputClassChild extends MyOutputClass implements Runnable {
+	
+	private int crlfCnt = 0;
+	
+	public MyOutputClassChild(String text, int cnt) {
+		super(text);
+		crlfCnt = cnt;
+	}
+	
+	protected void MachWas() {
+		if (crlfCnt != 0) {
+			if (cnt % crlfCnt == 0) {
+				System.out.println("CRLF");
+}}}}
+
+
diff --git a/VL04_09/ThreadDurchInterface_3/src/MyThreads/ThreadDurchInterface_3.java b/VL04_09/ThreadDurchInterface_3/src/MyThreads/ThreadDurchInterface_3.java
new file mode 100644
index 0000000000000000000000000000000000000000..d287ff4adc4fda56c7152fa2eafd2df233020369
--- /dev/null
+++ b/VL04_09/ThreadDurchInterface_3/src/MyThreads/ThreadDurchInterface_3.java
@@ -0,0 +1,30 @@
+/** Programm zur Demonstration des Einsatzes von Runnable: Die Klasse,
+ * welche an den Thread übergeben wird erbt die Methode run(), und damit die
+ * Implementierung der Schnittstelle Runnable, von seiner Elternklasse. 
+ * 
+ * @author stedS
+ * @version 1.0 (2017-01-12) 
+ */
+package MyThreads;
+public class ThreadDurchInterface_3 {
+
+	public static void main(String[] args) {
+
+		//zuerst die Objekte anlegen, die von Thread nicht erben können
+		//aber dafür das Interface Runnable unterstützen: 
+		MyOutputClassChild myRunnable1 = new MyOutputClassChild("Hallo",4);
+		MyOutputClassChild myRunnable2 = new MyOutputClassChild("Meti",0);		
+		
+		//nun alle gewünschten Threads anlegen:
+		MyInputClass myThread1 	= new MyInputClass();
+		Thread myThread2 		= new Thread(myRunnable1);
+		Thread myThread3 		= new Thread(myRunnable2);
+				
+		//Thread-Objekte starten
+		myThread1.start();
+		myThread2.start();
+		myThread3.start();
+	}
+}
+
+