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

Vereinfachung ThreadMonitor1 Beispiel

parent 10a8a868
No related branches found
No related tags found
No related merge requests found
/bin/
......@@ -5,9 +5,23 @@ public class Thread_TextAusgabe extends Thread {
this.c = c;
}
static synchronized void SchreibeZeile (char c) {
//static void SchreibeZeile (char c) {
for (int ii=0; ii< 20; ii++) {
System.out.print(c + " ");
//Warteschleife:
for (int ll=0; ll< 1000000; ll++) {
Double kk = Math.sqrt(ll);
}
}
System.out.println();
}
public void run() {
for (int ii=0; ii< 5; ii++) {
Ausgabe.SchreibeZeile(c);
SchreibeZeile(c);
//Thread.yield();
}
}
}
......
/** Programm zur Demonstration der Threadsynchronisation
* durch den Einsatz eines Monitors: Zwei Threads sollen
* jeweils 10 mal die im Konstruktor übergebene Ziffer in eine
* Zeile schreiben. Erst wenn die Methode SchreibeZeile() gegen
* Zeile schreiben. Erst wenn die Methode SchreibeZeile() gegen
* Unterbrechungen gesperrt wird, indem sie mit synchronized er-
* weitert wird, erhält man die gewünschte gleichmäßige Ausgabe
* der Zahlenwerte.
*
* Um sicherzustellen, dass die Ausgabe-Threads auf ein gemeinsames
* Sperrobjekt zugreifen, muss die Methode SchreibeZeile() als static
* deklariert werden. Der Lock steht dann der Klasse Textausgabe nur
* einmal gemeinsam zur Verfügung und wird nicht für jedes instanzierte
* Objekt separat angelegt (in diesem Fall verfehlt er die gewünschte
* Wirkung.
*
* Die Thread-Methode yield() erweist sich als für die Aufgabe untauglich.
* Es ist weder sichergestellt, dass der thread beim Aufruf von yield()
* tatsächlich den running state verlässt, noch, dass ein thread unmittelbar
* nach Verlassen des running Zustandes nicht sofort wieder vom OS
* aktiviert wird.
*
* Die vorgestellte Lösung stellt nun zwar sicher, dass die Ausgabe einer
* Textzeile nicht unterbrochen wird, sie bewirkt jedoch nicht die
* wechselweise Ausgabe der Textzeilen der einzelnen Threads.
*
* @author stedS
* @version 1.0 (2016-01-12)
* @version 2.0 (2021-01-25)
*/
package inf3;
public class ThreadsMonitor1 {
char c;
public static void main(String[] args) {
Thread_TextAusgabe th1 = new Thread_TextAusgabe('1');
Thread_TextAusgabe th2 = new Thread_TextAusgabe('2');
......
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