Nebenläufige Programmierung mit Threads
Empfohlene Schulungsdauer: 2 Tage, insgesamt 16 Unterrichtsstunden à 45 Minuten
Kursziele
Java ermöglicht seit der Version 1.0 das Programmieren von Multithreaded Applikationen. Das Kompaktseminar wiederholt zunächst die Grundlagen paralleler Anwendungen mit den Typen Thread, Runnable sowie dem Konstrukt synchronized. Im Hauptteil lernen die Teilnehmer die in Java 5.0 eingeführten neuen Klassen und Schnittstellen aus dem Paket java.util.concurrent und Unterpaketen kennen, mit denen Thread-Koordination nunmehr komfortabel und effektiv möglich ist. Im Ausblick führt das Seminar an Beispielen das Fork/Join-Framework vor, was Teil von Java 7 ist.
Zielgruppe
Software-EntwicklerKursvoraussetzungen
Der Kurs ›Java Grundlagen‹, ›Java für Umsteiger‹ oder vergleichbare Kenntnisse.Seminarinhalte
![[LOGO]](../../images/seminare/logos/java.png)
Wiederholung zentraler Begriffe
- Notwendigkeit von nebenläufigen Programmen (Mehrkernprozessoren)
- Erzeugen von Threads
- Die SchnittstelleRunnable
- Lebenszyklus von Threads, Starten und Stoppen, Interrupt
- Auf das Ende mitjoin()warten
- Dämonen
- Thread-Scheduling und Prioritäten
- Exceptions: Auffangen von Ausnahmen
- Race Conditions
- Mit synchronized Methoden oder kritische Abschnitte schützen
- Reentrante synchronisierte Blöcke
- Synchronisierung statischer Methoden und Objektmethoden
- Verhungern (Starvation)
- Deadlocks, Deadlock Detection Utility der JVM und von Eclipse
-wait()undnotify(),notifyAll()sowie Zeitfenster und Interrupts
-ThreadLocal
- Threads und assoziierteClassLoader
Das Paket
- Entstehung des Paketes durch Doug Leajava.util.concurrent
- Nutzung für Java-Versionen vor 5.0
-java.util.concurrent.atomic
- Das PaketLockundReentrantLockjava.util.concurrent.locks
- Die SchnittstelleLockfür explizites Locking
- Lock-ImplementierungReentrantLock
-lock(),unlock(),finally
- Die AufzählungTimeUnit
Executor
- Die SchnittstelleExecutorundExecutorService
- Thread-Pools und Scheduled Threads
-ThreadPoolExecutor,RejectedExecutionHandler
Scheduling
-java.util.Timerundjavax.swing.Timer
-ScheduledThreadPoolExecutor
- Scheduling im Großen: Quartz
- Threads mit ErgebnissenRunnableundCallable
-Callableund die Nutzung
- Spätere Ergebnisse mitFuture
Komfortable Thread-Koordination
-Queue, Blocking-Queue,LinkedBlockingQueue,DelayQueue,PriorityBlockingQueue
-CyclicBarrier, Vergleich mitjoin()
-Exchanger
-Latch
Anwendung von Threads in der Java-Bibliothek
- Thread-Kommunikation mit Piped-Stream,PipedReader,PipedWriter
- Paralleler Zugriff auf DatenstrukturenVectorvs.ArrayList
-Collections.synchronizedXXX(), Iteratoren
- Lock-Free Datenstrukturen,ConcurrentHashMap,ConcurrentLinkedQueue
-CopyOnWriteArrayList,CopyOnWriteArraySet
- Threads in Swings, der AWT-Event-Dispatching Thread
Testen
- Umgang mit dem Nichtdeterminismus
- JUnit undjunit.extensions.RepeatedTest
- JunitPerf und com.clarkware.junitperf.LoadTest
Schulungsunterlagen
Deutschsprachige Unterlagen (Kopien der Folien), Zertifikat.
Eingesetze Seminar-Software
Als Laufzeitumgebung wird standardmäßig Java SE 6 von Sun zusammen mit der Entwicklungsumgebung Eclipse 3.6 eingesetzt (Paket ›Eclipse IDE for Java EE Developers‹). Auf Wunsch auch NetBeans 6 oder andere Entwicklungsumgebungen (IntelliJ IDEA, Oracle JDeveloper).
Schlagwörter
Unternehmen
Weiterführende Seminare
Eclipse IDE, Oberflächen mit Swing und JFC, Neuerungen in Java 5, Datenbankanbindung über JDBC, Java und XML, JavaServer Pages (JSP) und Servlets, Java 2 Platform Enterprise Edition (J2EE) 1.4, Java Platform, Enterprise Edition (Java EE) 5, Enterprise JavaBeans (EJB 2.1) mit XDoclet, Enterprise JavaBeans (EJB) 3 und Persistence API, Spring-Framework, OR-Mapping mit Hibernate und JPA, Java ME: Programmierung mobiler Endgeräte, Sun Certified Java Programmer (SCJP), Refactoring, Design Patterns (Entwurfsmuster) in Java, Effektiv Java programmieren
![Zu einem Bookmark-Anbieter hinzufügen [Addthis]](../../images/bookmarks/addthis.png)
![Zu Google Bookmarks hinzufügen [Google Bookmarks]](../../images/bookmarks/google.png)
![Zu Yahoo! Bookmarks hinzufügen [Yahoo! Bookmarks]](../../images/bookmarks/yahoo.png)
![Zu Delicius hinzufügen [Delicius]](../../images/bookmarks/delicious.png)
![Zu Mister Wong hinzufügen [Mister Wong]](../../images/bookmarks/misterwong.png)