Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Eigene Klassen schreiben
6 Exceptions
7 Generics<T>
8 Äußere.innere Klassen
9 Besondere Klassen der Java SE
10 Architektur, Design und angewandte Objektorientierung
11 Die Klassenbibliothek
12 Bits und Bytes und Mathematisches
13 Datenstrukturen und Algorithmen
14 Threads und nebenläufige Programmierung
15 Raum und Zeit
16 Dateien, Verzeichnisse und Dateizugriffe
17 Datenströme
18 Die eXtensible Markup Language (XML)
19 Grafische Oberflächen mit Swing
20 Grafikprogrammierung
21 Netzwerkprogrammierung
22 Verteilte Programmierung mit RMI
23 JavaServer Pages und Servlets
24 Datenbankmanagement mit JDBC
25 Reflection und Annotationen
26 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Stichwort

Download:
- ZIP, ca. 20,5 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Java ist auch eine Insel von Christian Ullenboom
Das umfassende Handbuch
Buch: Java ist auch eine Insel

Java ist auch eine Insel
geb., mit DVD
1482 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1506-0
Pfeil 14 Threads und nebenläufige Programmierung
  Pfeil 14.1 Nebenläufigkeit
    Pfeil 14.1.1 Threads und Prozesse
    Pfeil 14.1.2 Wie parallele Programme die Geschwindigkeit steigern können
    Pfeil 14.1.3 Was Java für Nebenläufigkeit alles bietet
  Pfeil 14.2 Threads erzeugen
    Pfeil 14.2.1 Threads über die Schnittstelle Runnable implementieren
    Pfeil 14.2.2 Thread mit Runnable starten
    Pfeil 14.2.3 Die Klasse Thread erweitern
  Pfeil 14.3 Thread-Eigenschaften und -Zustände
    Pfeil 14.3.1 Der Name eines Threads
    Pfeil 14.3.2 Wer bin ich?
    Pfeil 14.3.3 Die Zustände eines Threads *
    Pfeil 14.3.4 Schläfer gesucht
    Pfeil 14.3.5 Mit »yield()« auf Rechenzeit verzichten
    Pfeil 14.3.6 Der Thread als Dämon
    Pfeil 14.3.7 Das Ende eines Threads
    Pfeil 14.3.8 Einen Thread höflich mit Interrupt beenden
    Pfeil 14.3.9 »UncaughtExceptionHandler« für unbehandelte Ausnahmen
    Pfeil 14.3.10 Der »stop()« von außen und die Rettung mit ThreadDeath *
    Pfeil 14.3.11 Ein Rendezvous mit »join()« *
    Pfeil 14.3.12 Arbeit niederlegen und wieder aufnehmen *
    Pfeil 14.3.13 Priorität *
  Pfeil 14.4 Der Ausführer (Executor) kommt
    Pfeil 14.4.1 Die Schnittstelle »Executor«
    Pfeil 14.4.2 Die Thread-Pools
    Pfeil 14.4.3 Threads mit Rückgabe über Callable
    Pfeil 14.4.4 Mehrere Callable abarbeiten
    Pfeil 14.4.5 Mit ScheduledExecutorService wiederholende Ausgaben und Zeitsteuerungen
  Pfeil 14.5 Synchronisation über kritische Abschnitte
    Pfeil 14.5.1 Gemeinsam genutzte Daten
    Pfeil 14.5.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
    Pfeil 14.5.3 Punkte parallel initialisieren
    Pfeil 14.5.4 »i++« sieht atomar aus, ist es aber nicht *
    Pfeil 14.5.5 Kritische Abschnitte schützen
    Pfeil 14.5.6 Schützen mit ReentrantLock
    Pfeil 14.5.7 Synchronisieren mit »synchronized«
    Pfeil 14.5.8 Synchronized-Methoden der Klasse »StringBuffer« *
    Pfeil 14.5.9 Mit synchronized synchronisierte Blöcke
    Pfeil 14.5.10 Dann machen wir doch gleich alles synchronisiert!
    Pfeil 14.5.11 Lock-Freigabe im Fall von Exceptions
    Pfeil 14.5.12 Deadlocks
    Pfeil 14.5.13 Mit »synchronized« nachträglich synchronisieren *
    Pfeil 14.5.14 Monitore sind reentrant – gut für die Geschwindigkeit *
    Pfeil 14.5.15 Synchronisierte Methodenaufrufe zusammenfassen *
  Pfeil 14.6 Synchronisation über Warten und Benachrichtigen
    Pfeil 14.6.1 Die Schnittstelle »Condition«
    Pfeil 14.6.2 It’s Disco-Time *
    Pfeil 14.6.3 Warten mit »wait()« und Aufwecken mit »notify()« *
    Pfeil 14.6.4 Falls der Lock fehlt: IllegalMonitorStateException *
  Pfeil 14.7 Zeitgesteuerte Abläufe
    Pfeil 14.7.1 Die Klassen »Timer« und »TimerTask«
    Pfeil 14.7.2 Job-Scheduler Quartz
  Pfeil 14.8 Einen Abbruch der virtuellen Maschine erkennen
  Pfeil 14.9 Zum Weiterlesen


Galileo Computing - Zum Seitenanfang

14.7 Zeitgesteuerte Abläufe  Zur nächsten ÜberschriftZur vorigen Überschrift

Ein Scheduler arbeitet Programmstücke nach einer festen Zeitspanne oder zu einem fixen Zeitpunkt einmal oder wiederholt ab. Notwendigkeiten für 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

Galileo Computing - Zum Seitenanfang

14.7.1 Die Klassen »Timer« und »TimerTask«  Zur 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 14.29  com/tutego/insel/thread/timer/TimerTaskDemo.java, Task

class Task extends TimerTask
{
  @Override public void run()
  {
    System.out.println( "Make my day." );
  }
}

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 14.30  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 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 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.



Galileo Computing - Zum Seitenanfang

14.7.2 Job-Scheduler Quartz  topZur 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
Zum Katalog: Java ist auch eine Insel





Java ist auch eine Insel
Jetzt bestellen


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

 Buchempfehlungen
Zum Katalog: Computergeschichte(n) – nicht nur für Geeks





 Computergeschichte(n)
 nicht nur für Geeks


Zum Katalog: Java und XML






 Java und XML


Zum Katalog: Einstieg in Java






 Einstieg
 in Java


Zum Katalog: Einstieg in XML






 Einstieg
 in XML


Zum Katalog: Visual C# 2010






 Visual C# 2010


Zum Katalog: Professionell entwickeln mit Visual C# 2010






 Professionell
 entwickeln mit
 Visual C# 2010


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2011
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> 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