From 4b36f69763a34093a7fd7955a099bfb25799c2cb Mon Sep 17 00:00:00 2001
From: stedS <sven.steddin@reutlingen-university.de>
Date: Tue, 28 Jan 2020 01:08:33 +0100
Subject: [PATCH] ThreadPriorityTest Code verbessert

---
 .../src/inf3/PriorityThread.java                | 17 +++++++++++------
 .../src/inf3/ThreadPriorityTest.java            | 14 ++++++++++----
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/VL04_09/ThreadPriorityTest/src/inf3/PriorityThread.java b/VL04_09/ThreadPriorityTest/src/inf3/PriorityThread.java
index 378e0a0..a0424ec 100644
--- a/VL04_09/ThreadPriorityTest/src/inf3/PriorityThread.java
+++ b/VL04_09/ThreadPriorityTest/src/inf3/PriorityThread.java
@@ -2,7 +2,6 @@ package inf3;
 import java.util.ArrayList;
 
 public class PriorityThread extends Thread {
-	static 			ArrayList <String> 	resultStrings = new ArrayList<String>();
 	volatile static long				lastThreadID = 99999999;
 	volatile static boolean 			gameOver = false;
 	volatile long						result = 0L;
@@ -14,21 +13,27 @@ public class PriorityThread extends Thread {
 		lastThreadID = Thread.currentThread().getId();
 	}
 	
-	synchronized void job() {
+	void job() {
 		long threadID = Thread.currentThread().getId(); 
 		if (lastThreadID != threadID) {
 			lastThreadID = threadID; 
 			taskSwitches++;
 		}
 		result += threadID;
-		if (++count >= 1_000_000) gameOver = true;
+		if (++count >= 10_000_000) gameOver = true;
 	}
 	
-	public void run() {
-		while (!gameOver) { job(); }
-		resultStrings.add("thread prio ("+ getPriority() + 
+	String getResultStr() {
+		return ("thread prio ("+ getPriority() + 
 				") beendet:\tOperationen: " + count + ";\tswitches: "+ 
 				taskSwitches+";\t Op/slot: "+ (double)count/taskSwitches);
 	}
+	
+	public void run() {
+		while (!gameOver) { 
+			job(); 
+			//Thread.yield();  //was bewirkt der Aufruf von yield() an dieser Stelle? 
+		}
+	}
 }
 
diff --git a/VL04_09/ThreadPriorityTest/src/inf3/ThreadPriorityTest.java b/VL04_09/ThreadPriorityTest/src/inf3/ThreadPriorityTest.java
index efe55d4..560b4a5 100644
--- a/VL04_09/ThreadPriorityTest/src/inf3/ThreadPriorityTest.java
+++ b/VL04_09/ThreadPriorityTest/src/inf3/ThreadPriorityTest.java
@@ -1,7 +1,10 @@
 /** ThreadPriorityTest.java
 * Das Programm soll zeigen, wie sich die Zuordnung einer Thread Priorität 
 * auf die Häufigkeit der Threadaufrufe und die Länge der jedem Thread 
-* zugeordneten Zeitscheiben auswirkt.
+* zugeordneten Zeitscheiben auswirkt. 
+* 
+* Der Vergleich zwischen Ausführung des Programms mit und ohne yield()-Befehl
+* verdeutlicht die Strategie der JVM bei der Berücksichtigung untersch. Prioritäten. 
 *  
 * @author Steddin
 * @version 2.00, 2020-01-26 (Steddin) Codeumfang reduziert; Ablauf vereinfacht
@@ -28,9 +31,12 @@ public class ThreadPriorityTest {
 			} catch (InterruptedException e) {
 				e.printStackTrace();
 			}
-		}			
-		for (String bla: PriorityThread.resultStrings) {
-			System.out.println(bla); 
+		}	
+		//Auch nach Durchlauf der run() Methode ist das Thread-Object noch verfügbar und 
+		//es kann auf seine Daten zugegriffen weerden: Ausgabe der Ergebnisse erst nach 
+		//Abschluss aller Threads, um die Ausführung der Threads nicht zu stören
+		for(int kk = 0; kk < Thread.MAX_PRIORITY; kk++) {
+			System.out.println(priorObjArr[kk].getResultStr()); 
 		}
 	}
 }
-- 
GitLab