parallelism:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
parallelism:start [2024/12/20 07:25] – [Beispiel 1: Überschreiben der run()-Methode] Martin Pabst | parallelism:start [2025/03/09 07:53] (aktuell) – [Beispiel 1: Überschreiben der run()-Methode] Martin Pabst | ||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
* Von modernen Betriebssystemen wird erwartet, dass sie es ermöglichen, | * Von modernen Betriebssystemen wird erwartet, dass sie es ermöglichen, | ||
- | Welche Herausforderungen dies in der Softwartechnik zur Folge hat und wie die auftretenden Probleme gelöst werden können, erfahren Sie in diesem Kapitel. | + | Welche Herausforderungen dies in der Softwartechnik zur Folge hat und wie die auftretenden Probleme gelöst werden können, erfahren Sie in diesem Kapitel. |
+ | **Unterkapitel: | ||
+ | * [[parallelism: | ||
+ | * [[parallelism: | ||
+ | * [[parallelism: | ||
</ | </ | ||
Zeile 57: | Zeile 61: | ||
- | ==== Beispiel | + | ===== Die Methode join ===== |
+ | <WRAP center round info 60%> | ||
+ | Ruft man während der Abarbeitung eines Threads (im folgenden: " | ||
+ | **Wichtiges Detail:** \\ | ||
+ | Das " | ||
+ | </ | ||
+ | |||
+ | ==== Beispiel 2: Nutzung von Thread.join | ||
< | < | ||
- | <div class=" | + | <div class=" |
<script type=" | <script type=" | ||
SystemTools.setSpeed(8); | SystemTools.setSpeed(8); | ||
+ | ArrayList< | ||
+ | |||
for (int i = 0; i < 10; i++) { | for (int i = 0; i < 10; i++) { | ||
- | new MyThread(" | + | Thread t = new MyThread(" |
+ | | ||
+ | t.start(); | ||
} | } | ||
- | while (true); | + | for(Thread t: threads){ |
+ | | ||
+ | } | ||
+ | |||
+ | println(" | ||
class MyThread extends Thread { | class MyThread extends Thread { | ||
- | int i = 0; | ||
| | ||
+ | int i = 0; | ||
while (i < 10) { | while (i < 10) { | ||
i++; | i++; | ||
Zeile 87: | Zeile 106: | ||
</ | </ | ||
</ | </ | ||
+ | ==== Beispiel 2: Eigene Klasse, die Runnable implementiert ==== | ||
+ | {{ : | ||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | SystemTools.setSpeed(8); | ||
+ | for (int i = 0; i < 10; i++) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | while (true); | ||
+ | |||
+ | class MyRunnable implements Runnable { | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | this.name = name; | ||
+ | } | ||
+ | |||
+ | | ||
+ | int i = 0; | ||
+ | while (i < 10) { | ||
+ | i++; | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Für Interessierte: | ||
+ | <WRAP center round info 80%> | ||
+ | Besitzt ein Interface nur eine einzige Methode, so nennt man es **functional interface**. Das Interface '' | ||
+ | An jeder Stelle, an der ein Objekt einer Klasse erwartet wird, die ein functional interface implementiert, | ||
+ | <code java> | ||
+ | (parameter 1, ..., parameter n) -> { Anweisungen } | ||
+ | </ | ||
+ | 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 closure eine Referenz übergeben wird. | ||
+ | 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. | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | SystemTools.setSpeed(8); | ||
+ | for (int i = 0; i < 10; i++) { | ||
+ | | ||
+ | | ||
+ | for (int j = 0; j < 10; j++) { | ||
+ | println(name + " counts: " + j); | ||
+ | } | ||
+ | }); | ||
+ | | ||
+ | } | ||
+ | |||
+ | while (true); | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ |
parallelism/start.1734679520.txt.gz · Zuletzt geändert: 2024/12/20 07:25 von Martin Pabst