Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Neues in Java 7
2 Threads und nebenläufige Programmierung
3 Datenstrukturen und Algorithmen
4 Raum und Zeit
5 Dateien, Verzeichnisse und Dateizugriffe
6 Datenströme
7 Die eXtensible Markup Language (XML)
8 Dateiformate
9 Grafische Oberflächen mit Swing
10 Grafikprogrammierung
11 Netzwerkprogrammierung
12 Verteilte Programmierung mit RMI
13 RESTful und SOAP Web-Services
14 JavaServer Pages und Servlets
15 Applets
16 Datenbankmanagement mit JDBC
17 Technologien für die Infrastruktur
18 Reflection und Annotationen
19 Dynamische Übersetzung und Skriptsprachen
20 Logging und Monitoring
21 Java Native Interface (JNI)
22 Sicherheitskonzepte
23 Dienstprogramme für die Java-Umgebung
Stichwort
Download: - openbook, ca. 21,3 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> / Java 7 - Mehr als eine Insel | vor >>
Java 7 - Mehr als eine Insel von Christian Ullenboom Das Handbuch zu den Java SE-Bibliotheken
Java 7 - Mehr als eine Insel Galileo Computing 1433 S., 2012, geb. 49,90 Euro, ISBN 978-3-8362-1507-7 |
| 2 Threads und nebenläufige Programmierung
|  | 2.1 Threads erzeugen
|  |  | 2.1.1 Threads über die Schnittstelle Runnable implementieren
|  |  | 2.1.2 Thread mit Runnable starten
|  |  | 2.1.3 Die Klasse Thread erweitern
|  | 2.2 Thread-Eigenschaften und -Zustände
|  |  | 2.2.1 Der Name eines Threads
|  |  | 2.2.2 Wer bin ich?
|  |  | 2.2.3 Die Zustände eines Threads *
|  |  | 2.2.4 Schläfer gesucht
|  |  | 2.2.5 Mit yield() auf Rechenzeit verzichten
|  |  | 2.2.6 Der Thread als Dämon
|  |  | 2.2.7 Das Ende eines Threads
|  |  | 2.2.8 Einen Thread höflich mit Interrupt beenden
|  |  | 2.2.9 UncaughtExceptionHandler für unbehandelte Ausnahmen
|  |  | 2.2.10 Der stop() von außen und die Rettung mit ThreadDeath *
|  |  | 2.2.11 Ein Rendezvous mit join() *
|  |  | 2.2.12 Arbeit niederlegen und wieder aufnehmen *
|  |  | 2.2.13 Priorität *
|  | 2.3 Der Ausführer (Executor) kommt
|  |  | 2.3.1 Die Schnittstelle Executor
|  |  | 2.3.2 Die Thread-Pools
|  |  | 2.3.3 Threads mit Rückgabe über Callable
|  |  | 2.3.4 Mehrere Callable abarbeiten
|  |  | 2.3.5 ScheduledExecutorService für wiederholende Ausgaben und Zeitsteuerungen nutzen
|  | 2.4 Synchronisation über kritische Abschnitte
|  |  | 2.4.1 Gemeinsam genutzte Daten
|  |  | 2.4.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
|  |  | 2.4.3 Punkte parallel initialisieren
|  |  | 2.4.4 i++ sieht atomar aus, ist es aber nicht *
|  |  | 2.4.5 Kritische Abschnitte schützen
|  |  | 2.4.6 Kritische Abschnitte mit ReentrantLock schützen
|  |  | 2.4.7 Synchronisieren mit synchronized
|  |  | 2.4.8 Synchronized-Methoden der Klasse StringBuffer *
|  |  | 2.4.9 Mit synchronized synchronisierte Blöcke
|  |  | 2.4.10 Dann machen wir doch gleich alles synchronisiert!
|  |  | 2.4.11 Lock-Freigabe im Fall von Exceptions
|  |  | 2.4.12 Deadlocks
|  |  | 2.4.13 Mit synchronized nachträglich synchronisieren *
|  |  | 2.4.14 Monitore sind reentrant – gut für die Geschwindigkeit *
|  |  | 2.4.15 Synchronisierte Methodenaufrufe zusammenfassen *
|  | 2.5 Synchronisation über Warten und Benachrichtigen
|  |  | 2.5.1 Die Schnittstelle Condition
|  |  | 2.5.2 It’s Disco-Time *
|  |  | 2.5.3 Warten mit wait() und Aufwecken mit notify() *
|  |  | 2.5.4 Falls der Lock fehlt: IllegalMonitorStateException *
|  | 2.6 Datensynchronisation durch besondere Concurrency-Klassen *
|  |  | 2.6.1 Semaphor
|  |  | 2.6.2 Barrier und Austausch
|  |  | 2.6.3 Stop and go mit Exchanger
|  | 2.7 Atomare Operationen und frische Werte mit volatile *
|  |  | 2.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen
|  |  | 2.7.2 Das Paket java.util.concurrent.atomic
|  | 2.8 Teile und herrsche mit Fork und Join *
|  |  | 2.8.1 Algorithmendesign per »teile und herrsche«
|  |  | 2.8.2 Paralleles Lösen von D&C-Algorithmen
|  |  | 2.8.3 Fork und Join
|  | 2.9 Mit dem Thread verbundene Variablen *
|  |  | 2.9.1 ThreadLocal
|  |  | 2.9.2 InheritableThreadLocal
|  |  | 2.9.3 ThreadLocalRandom als Zufallszahlengenerator
|  |  | 2.9.4 ThreadLocal bei der Performance-Optimierung
|  | 2.10 Threads in einer Thread-Gruppe *
|  |  | 2.10.1 Aktive Threads in der Umgebung
|  |  | 2.10.2 Etwas über die aktuelle Thread-Gruppe herausfinden
|  |  | 2.10.3 Threads in einer Thread-Gruppe anlegen
|  |  | 2.10.4 Methoden von Thread und ThreadGroup im Vergleich
|  | 2.11 Zeitgesteuerte Abläufe
|  |  | 2.11.1 Die Typen Timer und TimerTask
|  |  | 2.11.2 Job-Scheduler Quartz
|  | 2.12 Einen Abbruch der virtuellen Maschine erkennen
|  | 2.13 Zum Weiterlesen
## 2.11 Zeitgesteuerte Abläufe Ein Scheduler arbeitet Programmstücke nach einer festen Zeitspanne oder zu einem fixen Zeitpunkt einmal oder wiederholt ab. Die Notwendigkeit für ein Scheduling gibt es insbesondere im Enterprise-Bereich häufig: In regelmäßigen Abständen müssen Reports erstellt werden, temporäre Daten sollen verschwinden und so weiter. Zwei Scheduling-Technologien sollen kurz vorgestellt werden: die Bibliotheksklasse java.util.Timer das Scheduling-Framework Quartz ### 2.11.1 Die Typen Timer und TimerTask Die Implementierung von zeitgesteuerten Abläufen nimmt uns zum Teil die Java-Bibliothek ab, die dazu die Klassen java.util.Timer und java.util.TimerTask anbietet. Sie helfen bei der zeitgesteuerten Ausführung. Ein TimerTask ist eine Klasse, die uns Runnable implementieren lässt und Operationen umfasst, die zu einem Zeitpunkt oder in einer beliebigen Wiederholung ausgeführt werden sollen. Ein TimerTask wird dann einer Timer-Klasse übergeben, die den dazugehörigen Verwaltungs-Thread startet. Unser TimerTask soll einfach einen Text auf dem Bildschirm ausgeben: Listing 2.46: com/tutego/insel/thread/timer/TimerTaskDemo.java, Task
    class Task extends TimerTask
    {
      @Override public void run()
      {
        System.out.println( "Make my day." );
      }
    }
Abbildung 2.14: Timer und TimerTask Jetzt müssen wir nur noch dieses TimerTask-Objekt erzeugen und eine der Objektmethoden von Timer übergeben. In unserem Beispiel soll unser Text zwei Sekunden nach dem Eintragen auf dem Bildschirm ausgegeben werden und in einem zweiten Fall – nach einer Wartesekunde – alle fünf Sekunden: Listing 2.47: com/tutego/insel/thread/timer/TimerTaskDemo.java, TimerTaskDemo
    public class TimerTaskDemo
    {
      public static void main( String[] args )
      {
        Timer timer = new Timer();

        // Start in 2 Sekunden
        timer.schedule( new Task(), 2000 );

        // Start in einer Sekunde, dann Ablauf alle 5 Sekunden
        timer.schedule( new Task(), 1000, 5000 );
      }
    }
Die schedule()-Methode gibt es in vier Ausführungen. Dazu kommen zwei Methoden namens scheduleAtFixedRate(), die versuchen, die Genauigkeit zu verbessern. Dies lohnt sich bei Operationen, die über einen langen Zeitraum präziser ohne Drift ausgeführt werden sollen, wie es etwa bei einer Uhr gilt, die jede Stunde ihren großen Zeiger bewegt. Selbst wenn Hintergrundoperationen, wie die Garbage-Collection, die pünktliche Ausführung der Operation verhindern, wird die Verspätung bis zur nächsten Wiederholung aufgeholt. Ein Timer kann abgebrochen werden, wenn die cancel()-Methode aufgerufen wird.
Hinweis
Insgesamt gibt es drei Timer in Java: java.util.Timer, javax.management.timer.Timer und javax.swing.Timer. Der Management-Timer ist eine TimerMBean und als Managed Bean mit einer ganz besonderen Schnittstelle für Außenstehende zugänglich. Der Swing-Timer führt hingegen keine Task-Objekte aus, sondern ActionListener – und die auch immer im speziellen AWT-Event-Thread.
### 2.11.2 Job-Scheduler Quartz Der OpenSymphony Quartz Scheduler (http://www.opensymphony.com/quartz/) ist ein hochwertiger Job-Scheduler, der Aufgaben (Jobs) zu bestimmten Zeiten (hier kommt die java.util.Calendar-Klasse ins Spiel) und in gegebener Regelmäßigkeit durchführen kann. Die java.util.Timer-Klasse bietet nur die Angabe einer Startzeit und eines Wiederholungsintervalls. Quartz kann den Zustand der Jobs in einem JobStore speichern, etwa in einer Datenbank (JDBCJobStore), sodass auch nach einem unrühmlichen Ende die Jobs wieder gestartet und weitergeführt werden können. Die Timer-Klasse kann das nicht! Quartz und der Timer sprechen ihre Jobs durch eine Schnittstelle an. Bei Quartz heißt sie Job, und die Callback-Methode execute() ruft der Scheduler zu vorgegebenen Zeiten auf. Die zentrale ausführende Einheit erfragt eine statische Fabrikmethode:
    SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
    Scheduler sched = schedFact.getScheduler();
Die Methode sched.start() startet schließlich den Scheduler. Mit scheduleJob() lässt sich ein Job zusammen mit einem Trigger – das ist eine Beschreibung der Zeitparameter – starten. Eine Dokumentation findet sich auf der Website der Bibliothek und unter http://tutego.de/go/quartzbosanc. ### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück | <top> | vor >>
Zum Katalog
Java 7 – Mehr als eine Insel Jetzt bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchempfehlungen
| Java und XML
| Einstieg in Eclipse 3.7
| Android 3
| NetBeans Platform 7
| Java ist auch eine Insel
| Apps entwickeln für Android 4
| Java 7
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 2012
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de