parallelism:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
parallelism:start [2025/01/07 11:04] – [Nebenläufige Prozesse] Martin Pabst | parallelism:start [2025/05/02 08:05] (aktuell) – [Aufgabe 1: Arbeitsteiliges Abarbeiten einer Aufgabe durch mehrere Threads] Martin Pabst | ||
---|---|---|---|
Zeile 98: | Zeile 98: | ||
- | ==== Für Interessierte: | + | ===== Die Methode join ===== |
+ | <WRAP center round info 60%> | ||
+ | Ruft man während der Abarbeitung eines Threads (im folgenden: " | ||
+ | **Wichtiges Detail:** \\ | ||
+ | Das " | ||
+ | </ | ||
+ | |||
+ | ==== Beispiel 3: Nutzung von Thread.join ==== | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | SystemTools.setSpeed(8); | ||
+ | ArrayList< | ||
+ | |||
+ | for (int i = 0; i < 10; i++) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | for(Thread t: threads){ | ||
+ | | ||
+ | } | ||
+ | |||
+ | println(" | ||
+ | |||
+ | class MyThread extends Thread { | ||
+ | |||
+ | | ||
+ | int i = 0; | ||
+ | while (i < 10) { | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Aufgabe 1: Arbeitsteiliges 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 center round tip 80%> | ||
+ | **Wichtige Info zu dieser Aufgabe:** \\ | ||
+ | Javascript-Programme im Browser unterliegen der Einschränkung, | ||
+ | Startet man in einer " | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | int[] werte = new int[1000]; | ||
+ | for (int i = 0; i < werte.length; | ||
+ | | ||
+ | } | ||
+ | |||
+ | println(new ArrayTool().summe(werte)); | ||
+ | |||
+ | class ArrayTool { | ||
+ | |||
+ | int summe(int[] werte) { | ||
+ | int summe = 0; | ||
+ | for (int i = 0; i < werte.length; | ||
+ | summe += werte[i]; | ||
+ | } | ||
+ | |||
+ | return summe; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | [[.arbeitsteiligLoesung: | ||
+ | |||
+ | ==== Für Interessierte: | ||
<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 '' | Besitzt ein Interface nur eine einzige Methode, so nennt man es **functional interface**. Das Interface '' | ||
Zeile 107: | Zeile 195: | ||
Lambda functions sind ein Ersatz für die in vielen anderen Programmiersprachen verfügbaren **closures**, | Lambda functions sind ein Ersatz für die in vielen anderen Programmiersprachen verfügbaren **closures**, | ||
* im Falle der lambda function ihr Wert zum Zeitpunkt des Starts der Funktion übergeben während | * im Falle der lambda function ihr Wert zum Zeitpunkt des Starts der Funktion übergeben während | ||
- | * im Falle der closures | + | * im Falle der closure |
Bei letzteren kann daher von verschiedenen closures und von außerhalb auf **die identische Variable** zugegriffen werden, während bei ersteren jede lambda function ihre eigene Kopie der Variable erhält und nur auf diese zugreifen kann. | Bei letzteren kann daher von verschiedenen closures und von außerhalb auf **die identische Variable** zugegriffen werden, während bei ersteren jede lambda function ihre eigene Kopie der Variable erhält und nur auf diese zugreifen kann. | ||
</ | </ |
parallelism/start.1736247854.txt.gz · Zuletzt geändert: 2025/01/07 11:04 von Martin Pabst