package inf3;
/** Programm zur Demonstration der �bergabe eines Lambda Ausdrucks an 
* den Konstruktor eines Threads anstelle eines Objekts, welches das Interface
* Runnable unterst�tzt. Durch die Verwendung eines Lambda-Ausdrucks, der die 
* Methode run() darstellt, kann man sich die Definition einer eigenen
* Klasse, welche das Interface Runnable implementiert, sparen. Der Code
* wird somit k�rzer und besser lesbar.
* 
* <ul>
* 	<li> myThread1 wird durch die �bergabe eines Runnable Objekts erzeugt. Dieses
* 		 Object (myRunnable) muss zuvor angelegt werden und es muss die Klasse 
*        MyOutputClass definiert werden, welche die Methode run() implementiert </li>
*   <li> myThread2 wird erstellt, indem anstelle des Runnable-Objects die run()
*   	 Methode direkt als Lambda-Ausdruck an den Thread-Konstruktor �bergeben wird.</li> 
* </ul>
*
* @author Steddin
* @version 1.00, 2020-01-26 (Steddin) Erstausgabe
*/

public class ThreadRunnableMitLambda {
	public static void main(String[] args) {

		//Objekt anlegen, welches Runnable impl. und an Thread-Object �bergeben wird
		MyOutputClass myRunnable = new MyOutputClass();
		//Thread-Objekt erzeugen und Runnable-Object �bergeben
		Thread myThread1 = new Thread(myRunnable);
		//Thread-Object erzeugen und statt Runnable-Object "Lambda-Ausdruck" �bergeben
		Thread myThread2 = new Thread (
			() -> {	 while (true) { 
							System.out.print("+");
							try { Thread.sleep(500);	
							} catch (InterruptedException e) { e.printStackTrace(); }	
					 }
				  }					 );
		myThread1.start();
		myThread2.start();
	}
}