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

Erweiterung von Ordner VL04-9

parent 20125864
No related branches found
No related tags found
No related merge requests found
Showing
with 192 additions and 1 deletion
<?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>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>ThreadProgrammende</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
package inf3;
/** Programm zur Demonstration des Verhaltens von Vordergrund- und
* Hintergrund-Threads bei Programmende
*
* <ul>
* <li> Es soll gezeigt werden, in welchem Moment der Programmausfhrung
* der Daemon-Thread automatisch gestoppt wird.</li>
* <li> Es zeigt sich, dass das Programm erst dann zu Ende ist, wenn alle
* User Threads beendet sind. Erst dann wird der Daemon zerstrt. Dies
* geschieht hier nicht bereits mit dem Ende von main().</li>
* </ul>
*
* @author Steddin
* @version 1.01, 2020-01-06
* @version 1.00, 2019-01-18
*/
public class ThreadProgrammende {
/** Hauptprogramm startet einen Daemon-Thread und 2 User-Thread
* @param args Runntimeparameter werden nicht gentzt
* @author Sven Steddin
*/
public static void main(String[] args) {
System.out.println("main-Thread gestartet ...");
MyThread mythread1 = new MyThread(1);
MyThread mythread2 = new MyThread(2);
mythread2.setDaemon(true);
mythread1.start();
mythread2.start();
System.out.println("main-Thread beendet (Programmende?)");
}
}
/** Thread zeigt unterschiedliches Verhalten, je nachdem, ob er als user thread oder
* als daemon thread erzeugt wird
* @author stedS
*/
class MyThread extends Thread {
int idx; /** Kennnummer des Threads */
int cnt = 0; /** Anzahl der Aufrufe des Threads */
MyThread (int idx) {
this. idx = idx;
}
public void run() {
while(true) {
String t = this.isDaemon() ? "Daemon" : "Normal";
System.out.println("Thread "+idx+" ["+t+"] : "+ ++cnt +". Durchlauf");
if (!this.isDaemon() && (cnt>10)) {
System.out.println("Thread "+idx+" ["+t+"] : Abbruch");
System.out.println("Luft der Daemon weiter?");
break;
}
try {
sleep(600); // was passiert, wenn sleep() nicht aufgerufen wird?
// ... lsst sich nicht direkt vorhersagen --> ausprobieren!
} catch (InterruptedException e) { e.printStackTrace(); }
}
}
}
......@@ -16,7 +16,7 @@ public class ThreadDurchVererbung_0 {
/** Thread startet weiteren Thread zum Einlesen von Zahlen über die Tastatur und
* gibt anschließend Sternchen auf dem Bildschirm aus.
* @param args Keine Auswertung von Runtimeparametern
* @author Steddinzur Ausgabe von Sternchen auf dem Display
* @author Steddin
*/
public static void main(String[] args) {
MyThreadClass myThread = new MyThreadClass();
......
<?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>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>ThreadDurchVererbung_2_Daemon</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
package MyThreads;
import java.util.Scanner;
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);
if (ii>999) break;
}
}
}
package MyThreads;
public class MyOutputClass extends Thread {
private String text;
MyOutputClass(String text)
{
this.text = text;
}
public void run() {
long kk = 0;
while (true) {
if (kk++ % 10000000 == 0) {
System.out.println(text + " ");
}
}
}
}
/** Programm zur Demonstration der Abhngigkeit von Hintergrund Threads
* und Vordergrund-Threads.
*
* @version 1.0 (2017-01-12)
*/
package MyThreads;
public class ThreadDurchVererbung_2_Daemon {
/** Durch Auskommentieren des Befehls zum Setzen von Daemon Threads
* kann das Verhalten des Programms untersucht werden.
* @param args Runntimeparameter nicht genutzt
* @author stedS
*/
public static void main(String[] args) {
MyInputClass myThread1 = new MyInputClass();
MyOutputClass myThread2 = new MyOutputClass("Hallo");
MyOutputClass myThread3 = new MyOutputClass("Meti");
//myThread2.setDaemon(true);
//myThread3.setDaemon(true);
myThread1.start();
myThread2.start();
myThread3.start();
}
}
//System.exit(3); //kann verwendet werden, um Programm endgltig abzuschieen
\ No newline at end of file
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