Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
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

Buch bestellen
Ihre Meinung?

Spacer
Java 7 - Mehr als eine Insel von Christian Ullenboom
Das Handbuch zu den Java SE-Bibliotheken
Buch: Java 7 - Mehr als eine Insel

Java 7 - Mehr als eine Insel
Rheinwerk Computing
1433 S., 2012, geb.
49,90 Euro, ISBN 978-3-8362-1507-7
Pfeil 2 Threads und nebenläufige Programmierung
Pfeil 2.1 Threads erzeugen
Pfeil 2.1.1 Threads über die Schnittstelle Runnable implementieren
Pfeil 2.1.2 Thread mit Runnable starten
Pfeil 2.1.3 Die Klasse Thread erweitern
Pfeil 2.2 Thread-Eigenschaften und -Zustände
Pfeil 2.2.1 Der Name eines Threads
Pfeil 2.2.2 Wer bin ich?
Pfeil 2.2.3 Die Zustände eines Threads *
Pfeil 2.2.4 Schläfer gesucht
Pfeil 2.2.5 Mit yield() auf Rechenzeit verzichten
Pfeil 2.2.6 Der Thread als Dämon
Pfeil 2.2.7 Das Ende eines Threads
Pfeil 2.2.8 Einen Thread höflich mit Interrupt beenden
Pfeil 2.2.9 UncaughtExceptionHandler für unbehandelte Ausnahmen
Pfeil 2.2.10 Der stop() von außen und die Rettung mit ThreadDeath *
Pfeil 2.2.11 Ein Rendezvous mit join() *
Pfeil 2.2.12 Arbeit niederlegen und wieder aufnehmen *
Pfeil 2.2.13 Priorität *
Pfeil 2.3 Der Ausführer (Executor) kommt
Pfeil 2.3.1 Die Schnittstelle Executor
Pfeil 2.3.2 Die Thread-Pools
Pfeil 2.3.3 Threads mit Rückgabe über Callable
Pfeil 2.3.4 Mehrere Callable abarbeiten
Pfeil 2.3.5 ScheduledExecutorService für wiederholende Ausgaben und Zeitsteuerungen nutzen
Pfeil 2.4 Synchronisation über kritische Abschnitte
Pfeil 2.4.1 Gemeinsam genutzte Daten
Pfeil 2.4.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
Pfeil 2.4.3 Punkte parallel initialisieren
Pfeil 2.4.4 i++ sieht atomar aus, ist es aber nicht *
Pfeil 2.4.5 Kritische Abschnitte schützen
Pfeil 2.4.6 Kritische Abschnitte mit ReentrantLock schützen
Pfeil 2.4.7 Synchronisieren mit synchronized
Pfeil 2.4.8 Synchronized-Methoden der Klasse StringBuffer *
Pfeil 2.4.9 Mit synchronized synchronisierte Blöcke
Pfeil 2.4.10 Dann machen wir doch gleich alles synchronisiert!
Pfeil 2.4.11 Lock-Freigabe im Fall von Exceptions
Pfeil 2.4.12 Deadlocks
Pfeil 2.4.13 Mit synchronized nachträglich synchronisieren *
Pfeil 2.4.14 Monitore sind reentrant – gut für die Geschwindigkeit *
Pfeil 2.4.15 Synchronisierte Methodenaufrufe zusammenfassen *
Pfeil 2.5 Synchronisation über Warten und Benachrichtigen
Pfeil 2.5.1 Die Schnittstelle Condition
Pfeil 2.5.2 It’s Disco-Time *
Pfeil 2.5.3 Warten mit wait() und Aufwecken mit notify() *
Pfeil 2.5.4 Falls der Lock fehlt: IllegalMonitorStateException *
Pfeil 2.6 Datensynchronisation durch besondere Concurrency-Klassen *
Pfeil 2.6.1 Semaphor
Pfeil 2.6.2 Barrier und Austausch
Pfeil 2.6.3 Stop and go mit Exchanger
Pfeil 2.7 Atomare Operationen und frische Werte mit volatile *
Pfeil 2.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen
Pfeil 2.7.2 Das Paket java.util.concurrent.atomic
Pfeil 2.8 Teile und herrsche mit Fork und Join *
Pfeil 2.8.1 Algorithmendesign per »teile und herrsche«
Pfeil 2.8.2 Paralleles Lösen von D&C-Algorithmen
Pfeil 2.8.3 Fork und Join
Pfeil 2.9 Mit dem Thread verbundene Variablen *
Pfeil 2.9.1 ThreadLocal
Pfeil 2.9.2 InheritableThreadLocal
Pfeil 2.9.3 ThreadLocalRandom als Zufallszahlengenerator
Pfeil 2.9.4 ThreadLocal bei der Performance-Optimierung
Pfeil 2.10 Threads in einer Thread-Gruppe *
Pfeil 2.10.1 Aktive Threads in der Umgebung
Pfeil 2.10.2 Etwas über die aktuelle Thread-Gruppe herausfinden
Pfeil 2.10.3 Threads in einer Thread-Gruppe anlegen
Pfeil 2.10.4 Methoden von Thread und ThreadGroup im Vergleich
Pfeil 2.11 Zeitgesteuerte Abläufe
Pfeil 2.11.1 Die Typen Timer und TimerTask
Pfeil 2.11.2 Job-Scheduler Quartz
Pfeil 2.12 Einen Abbruch der virtuellen Maschine erkennen
Pfeil 2.13 Zum Weiterlesen

Rheinwerk Computing - Zum Seitenanfang

2.11 Zeitgesteuerte AbläufeZur nächsten Überschrift

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

Rheinwerk Computing - Zum Seitenanfang

2.11.1 Die Typen Timer und TimerTaskZur nächsten ÜberschriftZur vorigen Überschrift

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

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.


Rheinwerk Computing - Zum Seitenanfang

2.11.2 Job-Scheduler QuartzZur vorigen Überschrift

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
  Zum Katalog
Neuauflage: Java SE 8 Standard-Bibliothek
Neuauflage: Java SE 8 Standard-Bibliothek
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Java EE 7






 Professionell
 entwickeln mit
 Java EE 7


Zum Katalog: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Katalog: Einstieg in Eclipse






 Einstieg in Eclipse


Zum Katalog: Einstieg in Java






 Einstieg in Java


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 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.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de