Java Util Concurrency

Werbung
Parallele Programmierung WS13
Prof. Fröhlich
von Sven Ahlfeld
Paketübersicht
 java.util.concurrent

Standardimplementierungen von Hilfsmitteln zur
nebenläufigen Programmierung
 java.util.concurrent.atomic

Synchronisation von einzelnen Variablen
 java.util.concurrent.locks

Differenzierte vergabe von Locks und Wartebedingungen
Warum dieses Package verwenden?
 Reduzierter Programmieraufwand
 Höhere Performance
 Höhere Zuverlässigkeit
Inhalt
 Keyword synchronized
 Keyword volatile
 Atomic
 Callable / Runnable
 Future V
 Executor(s)
 CyclicBarrier
 Locks
 (Concurrent Container)
Keyword synchronized
Ganze Methode threadsafe
Teil einer Methode threadsafe
Keyword volatile
 Synchronisation von Zugriff auf Variable
-> keine threadsafty
„Ist eine Variable als volatile deklariert, muss die JVM
sicherstellen, dass alle zugreifenden Threads ihre
Kopien aktualisieren, sobald die Variable geändert
wird. „
Vorteil gegenüber synchronized: keine Code Locks
Nachteil: Variable muss bei Zugriff aktualisiert werden
Keyword atomic
 Java Spezifikation:
 atomic sind alle read ODER write Zugriffe auf eine
Variable (außer long und double )
 long / double muss mit volatile deklariert werden für
atomic read / write Zugriff
java.util.concurrent.atomic
 Lock- und Wartefrei
Callable / Runnable
 Callable<V> Interface
 Methode: <V> call()
 kann Rückgabewert haben
 kann Exception werfen
 Runnable Interface
 Methode: void run()
 kann KEINEN Rückgabewert haben
 kann KEINE Exception werfen
Future V
A Future represents the result of an asynchronous computation.
Future<Long> result;
result = exe.submit(callableTask);
long data = result.get()
Executor Interface
An object that executes submitted Runnable tasks. This interface provides a way
of decoupling task submission from the mechanics of how each task will be run,
including details of thread use, scheduling, etc.
An Executor is normally used instead of explicitly creating threads.
Aufgabe wird im rufenden Thread erledigt – Thread ist Runnable
Aufgabe wird in einen Thread ausgelagert – Thread als Träger von Runnable
ExecutorService Interface
Executors
Zur Instantiierung von Thread-Pools wird die Factory-Klasse Executors
verwendet, die folgende Typen bereitstellt
FixedThreadPool
Ein Threadpool mit festgelegter Anzahl von Threads
CachedThreadPool
Dynamischer Pool, dessen Threads auf Anfrage generiert und automatisch
wieder gelöscht werden, sobald einzelne Threads länger als 60 Sekunden
nicht benötigt werden
ScheduledThreadPool
Threadpool dessen Threads nach einem Zeitplan oder periodisch aktiv
werden
CyclicBarrier Class
java.util.concurrent.locks
 Locks:
 müssen manuell verwaltet werden
 starvation möglich
 nicht blockgebunden
 anpassbar an Anforderungen
 nicht zwangsläufig blockierend
 Synchronised:
 blockgebunden
 idiotensicher
 blockierend
Concurrent Container
 ConcurrentHashMap<K,V>
 ConcurrentLinkedQueue<E>
 ConcurrentSkipListMap<K,V>
 ConcurrentSkipListSet<E>
Fragen?
Herunterladen