JAVA-B4
Parallel Computing (Parallelism)
Parallelism
Multithreading
Klassische Threads
Threads & Runnables
Overview
Thread (Begriff)
DruckThread
DruckRunnable
ThreadDemo
Output
Thread Lifecycle
Overview
start()
run()
join()
stop()?
StartRunJoinDemo Example
Von allein endende Threads
Threads mit while(criteria)
Daemon-Threads
Overview
ThreadDaemonDemo
Daemon (Summary)
Thread-Priority
Overview
t.setPriority(..)
MachineThread Klasse (Example)
ThreadPriorityDemo (Example)
Thread Notification
Grundlagen
wait
notify
notifyAll
sleep
sleep vs. wait
Thread Notification Demo
sychronized(monitor)
Notification/Monitor Zusammenfassung
Concurrent API
Vom Thread zur Concurrent API
Was ist Concurrency?
Was ist Concurrency?
Problemstellungen bei herkömmlichen Threads
Features der Concurrent API
Warum: Bedeutung des Umstiegs
Themenüberblick
Technischer Hintergrund
Thread.sleep(0, 500_000)
System.nanoTime()
Executors (Übersicht) #310
ExecutorService (Page)
Begriffsbestimmung
Excetutor
.execute()
ExecutorService (Begriff)
ExecutorService Interface Methoden
Mehrere Callables und Runnables auf einmal starten
Kontrolliertes Beenden
Executors-Utilily Klasse
newCachedThreadPool()
newSingleThreadExecutor()
newFixedThreadPool(int nThreads)
newWorkStealingPool()
newScheduledThreadPool(int corePoolSize)
Beispiel
ForkJoinPool, RecursiveTask, Executors Example#09
A | B1,B2,B3 | C mit Summenbildung.
Executor vs. ExecutorService Example#10
Executors.newFixedThreadPool(2)
Beispiel
Zusammenfassung Executors
Callable, Future #330
Callable Future (Begriff)
Callable Interface (Begriff)
Begriff
Callable erzeugen
Callable verwenden
Future
Beispiel
Future-Listen mit invokeAll
Was sind Future-Listen?
Wie erzeuge ich Future-Listen?
Wann blockt eine Future-Liste?
Beispiel mit 12 Callables in 4 Gruppen
Executors (#350) @! Bis auf Hinweis doppelt
Overview
Executor (Begriff)
ExecutorService (Begriff)
Executors.new~ Factory Methoden
Executors für ThreadPoolExecutor mit fixed Pool
ScheduledExecutorService
ScheduledExecutorService
Superklasse ExecutorService
schedule(*)
scheduleAtFixedRate(*)
scheduleWithFixedDelay(*)
ScheduledExecutorService (xmpl)
ProductClock(Main, Bsp.)
AbstractMachine**
AbstractMaterial**
Coal/Iron/Steel**
Coal-/Iron-/Steel-Machine**
Material**
ProductionBus-Machine**
Storage T**
ThreadPoolExecutor (Detail)
Executor Implementierung
ThreadPoolExecutor (Term)
ThreadPoolExecutor Beispiele
"FixedSizeExecutorExample" EXAMPLE C20
"CachedExecutorExample" EXAMPLE C21
SynchronousQueue
"ScheduledExecutorExample" EXAMPLE C22
"CustomSingleThreadExecutorRunnableComponent" EXAMPLE C23
"CustomPolicyRejectedExecutorExample" EXAMPLE C24
"PrioritizedCombinerRunnableComponent" EXAMPLE C30
"BufferingRejectedTasksExample" EXAMPLE C31
Java RejectedExecutionHandler
ThreadPoolExecutor FAQ
Synchronizer
Synchronizer (overview)
Synchronizer Begriff
CountDownLatch
CountDownLatch Example
CyclicBarrier
CyclicBarrier Example (@Zeit ausgeben!)
Phaser
Phaser Example(@Erl!)
Exchanger
Exchanger ping/pong
Semaphore
CompletableFuture
async!!!
SemaphoreCompletableFutureDemo (@!?)
Monitoring
JMX
ThreadPoolExecutor "live" überwachen
getActiveCount()
getPoolSize()
getCompletedTaskCount()
getQueue().size()
Concurrency
Example:DeterministicCopy @todo FILE LINK FEHLT!
Example:NonDeterministicCopy @todo FILE LINK FEHLT!
Kapitel java.util.concurrent.Flow @!fehltReactive Flow @!fehltPublisher TSubscriber TSubscription TProcressor TProcressor T
Overview
Executors | Overview #350
Mit dem Themenbereich der Executors beginnt der Einstieg in die Ausführung einzelner oder auch mehrerer Callables, geordnet, eher zufällig oder auch im Zeittakt. Executors betreffen Executor, ExecutorService, Scheduled~ Varianten sowie zugehörige Implementierungsklassen.
Wir geben einen ersten Gesamtüberblick als Voraussetzung für das Verständnis des Zusammenspiels aus Executor-Interfaces und dem späteren ThreadPoolExecutor.
Executors | Executor Interfaces
Um die ThreadPoolExecutor-Klasse verstehen zu können ist es wichtig, die zugehörigen Interfaces zu verstehen.
Executor Interfaces
Das Executor Interface ist das Basis-Interface. Es bietet und fordert nur eine eine einzige Methode:
Die execute(Runnable<T> r) Methode.
Die eigentliche Implementierungsklasse für Executors ist also durchaus ein ThreadPoolExecutor-Objekt oder ein ScheduledThreadPoolExecutor-Objekt, aber üblicherweise liefern alle Methode als Type ein Interfaces.
ExecutorService
ExecutorService ist eine das
Interface Executor erweiterndes Interfaces. Es fügt die Methoden
submit(..) für die Ausführung
eines einzelnen Tasks,
invokeAll(..) für eine
List von Callables
und shutdown() für
ein kontrolliertes Bitten um Beendingung
hinzu.
Das ExecutorService Interfaces reduziert damit die Sicht auf die Methoden, die man vom ThreadPoolExecutor für das Starten einzelner oder mehrerer Callables benötigt.
Mit shutdown() wird werden die aktuellen als Thread bereits begonnenden Tasks zuende ausgeführt, aber keine neuen mehr begonnen.
ScheduledExecutorService
Das Interface ScheduledExecutorService fügt weitere
Methoden für die Zeitsteuerung hinzu, darunter
schedule(..)
und scheduleAtFixedRate()
Executors Factory Methoden
Die Factory-Methode Executors.newFixedThreadPool() liefert
alle Instanzen der ThreadPoolExecutor-Klasse oder der ScheduledThreadPoolExecutor-Klasse
stetse als Interface.
Will man einen detaillierten Zugriff auf mehr Methoden haben, muss man eine implizite Typkonvertierung vornehmen und schlichtweg «casten».
Beispiel: ThreadPoolExecutor
ThreadPoolExecutor pool = (ThreadPoolExecutor) Executors.newFixedThreadPool(2);
pool.setCorePoolSize(10); // dynamisch erhöhen
Beispiel: ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor scheduledPool = (ThreadPoolExecutor) Executors.****;
scheduledPool.setCorePoolSize(10); // dynamisch erhöhen
UIO3 Es ist einfacher als Du denkst.
Stelle noch heute Deine Anfrage.
