Benutzer-Werkzeuge

Webseiten-Werkzeuge


parallelism:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
parallelism:start [2025/03/09 07:53] – [Beispiel 1: Überschreiben der run()-Methode] Martin Pabstparallelism:start [2025/05/02 08:05] (aktuell) – [Aufgabe 1: Arbeitsteiliges Abarbeiten einer Aufgabe durch mehrere Threads] Martin Pabst
Zeile 52: Zeile 52:
          println(this.getName() + " counts:  " + i );          println(this.getName() + " counts:  " + i );
                    
 +      }
 +   }
 +}
 +</script>
 +
 +</div>
 +</HTML>
 +
 +
 +==== Beispiel 2: Eigene Klasse, die Runnable implementiert ====
 +{{ :parallelism:thread-class-diagram_myrunnable.svg |}}
 +<HTML>
 +
 +<div class="java-online" style="height: 600px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Threads2'}">
 +
 +<script type="text/plain" title="Hauptprogramm.java">
 +SystemTools.setSpeed(8);
 +for (int i = 0; i < 10; i++) {
 +   Thread t = new Thread(new MyRunnable("Thread " + i));
 +   t.start();
 +}
 +
 +while (true);
 +
 +class MyRunnable implements Runnable {
 +   
 +   String name;
 +
 +   MyRunnable(String name) {
 +      this.name = name;
 +   }
 +
 +   public void run() {
 +      int i = 0;
 +      while (i < 10) {
 +         i++;
 +         println(this.name + " counts:  " + i);
       }       }
    }    }
Zeile 68: Zeile 105:
 </WRAP> </WRAP>
  
-==== Beispiel 2: Nutzung von Thread.join ====+==== Beispiel 3: Nutzung von Thread.join ====
  
 <HTML> <HTML>
Zeile 106: Zeile 143:
 </div> </div>
 </HTML> </HTML>
-==== Beispiel 2Eigene Klasse, die Runnable implementiert ==== + 
-{{ :parallelism:thread-class-diagram_myrunnable.svg |}}+==== Aufgabe 1Arbeitsteiliges Abarbeiten einer Aufgabe durch mehrere Threads ==== 
 +<WRAP center round todo 80%> 
 +Im folgenden Programm wird die Summe aller Elemente eines Arrays ermittelt und ausgegeben. Die Abarbeitung dieser Aufgabe erfolgt in einem einzigen Thread. \\ \\  
 +Schreiben Sie das Programm so um, dass 10 nebenläufige Threads je 1/10 der Werte addieren und nach Abarbeitung aller 10 Threads die Teilsummen zu einer Gesamtsumme zusammengefasst werden. 
 +</WRAP> 
 +<WRAP center round tip 80%> 
 +**Wichtige Info zu dieser Aufgabe:** \\  
 +Javascript-Programme im Browser unterliegen der Einschränkung, dass sie nur von einem Prozessor-Thread ausgeführt werden könnenDie Online-IDE simuliert mehrere Threads durch einen eigenen Scheduler, der schnell zwischen den Threads "umschaltet". Dies bringt aber natürlich keinen Geschwindigkeitsvorteil. \\  
 +Startet man in einer "echten" Java Runtime Engine mehrere Threads, so werden sie auf mehrere Prozessorkerne verteilt und erzielen damit i.d.R. einen erheblichen Geschwindigkeitsvorteil gegenüber einem einzelnen Thread. 
 +</WRAP> 
 <HTML> <HTML>
  
-<div class="java-online" style="height: 600px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Threads2'}">+<div class="java-online" style="height: 400px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'ThreadsArbeitsteiligVorlage'}">
  
 <script type="text/plain" title="Hauptprogramm.java"> <script type="text/plain" title="Hauptprogramm.java">
-SystemTools.setSpeed(8)+int[] werte = new int[1000]
-for (int i = 0; i < 10; i++) { +for (int i = 0; i < werte.length; i++) { 
-   Thread t new Thread(new MyRunnable("Thread " + i)); +   werte[i] Random.randint(-1000, 1000);
-   t.start();+
 } }
  
-while (true);+println(new ArrayTool().summe(werte));
  
-class MyRunnable implements Runnable {+class ArrayTool {
        
-   String name; +   int summe(int[] werte) { 
- +      int summe = 0; 
-   MyRunnable(String name) { +      for (int i = 0; i < werte.length; i++) { 
-      this.name name;+         summe +werte[i]; 
 +      } 
 +       
 +      return summe;
    }    }
  
-   public void run() { 
-      int i = 0; 
-      while (i < 10) { 
-         i++; 
-         println(this.name + " counts:  " + i); 
-      } 
-   } 
 } }
 </script> </script>
Zeile 142: Zeile 184:
 </HTML> </HTML>
  
 +[[.arbeitsteiligLoesung:start|Lösung]]
  
-==== Für Interessierte: Implementierung eines Interfaces durch eine Lambda-Function ====+==== Für Interessierte: Implementierung eines Interfaces durch eine Lambda-Function (nicht klausurrelevant) ====
 <WRAP center round info 80%> <WRAP center round info 80%>
 Besitzt ein Interface nur eine einzige Methode, so nennt man es **functional interface**. Das Interface ''Runnable'' ist ein Beispiel dafür. \\  Besitzt ein Interface nur eine einzige Methode, so nennt man es **functional interface**. Das Interface ''Runnable'' ist ein Beispiel dafür. \\ 
parallelism/start.1741506836.txt.gz · Zuletzt geändert: 2025/03/09 07:53 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki