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 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Generics, innere Klassen
10 Die Klassenbibliothek
11 Threads und nebenläufige Programmierung
12 Datenstrukturen und Algorithmen
13 Raum und Zeit
14 Dateien und Datenströme
15 Die eXtensible Markup Language (XML)
16 Grafische Oberflächen mit Swing
17 Grafikprogrammierung
18 Netzwerkprogrammierung
19 Verteilte Programmierung mit RMI und Web–Services
20 JavaServer Pages und Servlets
21 Applets
22 Midlets und die Java ME
23 Datenbankmanagement mit JDBC
24 Reflection und Annotationen
25 Logging und Monitoring
26 Sicherheitskonzepte
27 Java Native Interface (JNI)
28 Dienstprogramme für die Java-Umgebung
Stichwort
Download: - ZIP, ca. 14,1 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> / Java-Insel | vor >>
Java ist auch eine Insel (8. Auflage) von Christian Ullenboom Programmieren mit der Java Standard Edition Version 6
Java ist auch eine Insel (8. Aufl.) 8., aktual. Auflage, geb., mit DVD 1.475 S., 49,90 Euro Galileo Computing ISBN 978-3-8362-1371-4 |
| 11 Threads und nebenläufige Programmierung
|  | 11.1 Nebenläufigkeit
|  |  | 11.1.1 Threads und Prozesse
|  |  | 11.1.2 Wie parallele Programme die Geschwindigkeit steigern können
|  |  | 11.1.3 Was Java für Nebenläufigkeit alles bietet
|  | 11.2 Threads erzeugen
|  |  | 11.2.1 Threads über die Schnittstelle Runnable implementieren
|  |  | 11.2.2 Thread mit Runnable starten
|  |  | 11.2.3 Der Name eines Threads
|  |  | 11.2.4 Die Klasse Thread erweitern
|  |  | 11.2.5 Wer bin ich?
|  | 11.3 Die Zustände eines Threads
|  |  | 11.3.1 Threads schlafen
|  |  | 11.3.2 Mit yield() auf Rechenzeit verzichten
|  |  | 11.3.3 Das Ende eines Threads
|  |  | 11.3.4 UncaughtExceptionHandler für unbehandelte Ausnahmen
|  |  | 11.3.5 Einen Thread höflich mit Interrupt beenden
|  |  | 11.3.6 Der stop() von außen und die Rettung mit ThreadDeath
|  |  | 11.3.7 Ein Rendezvous mit join()
|  |  | 11.3.8 Barrier und Austausch mit Exchanger
|  |  | 11.3.9 Arbeit niederlegen und wieder aufnehmen
|  |  | 11.3.10 Priorität
|  |  | 11.3.11 Der Thread als Dämon
|  | 11.4 Der Ausführer (Executor) kommt
|  |  | 11.4.1 Die Schnittstelle Executor
|  |  | 11.4.2 Die Thread-Pools
|  |  | 11.4.3 Threads mit Rückgabe über Callable
|  |  | 11.4.4 Mehrere Callable abarbeiten
|  |  | 11.4.5 Mit ScheduledExecutorService wiederholende Ausgaben und Zeitsteuerungen
|  | 11.5 Synchronisation über kritische Abschnitte
|  |  | 11.5.1 Gemeinsam genutzte Daten
|  |  | 11.5.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
|  |  | 11.5.3 Punkte parallel initialisieren
|  |  | 11.5.4 i++ sieht atomar aus, ist es aber nicht
|  |  | 11.5.5 Kritische Abschnitte schützen
|  |  | 11.5.6 Schützen mit ReentrantLock
|  |  | 11.5.7 Synchronisieren mit synchronized
|  |  | 11.5.8 Synchronized-Methoden der Klasse StringBuffer
|  |  | 11.5.9 Mit synchronized synchronisierte Blöcke
|  |  | 11.5.10 Dann machen wir doch gleich alles synchronisiert!
|  |  | 11.5.11 Lock-Freigabe im Fall von Exceptions
|  |  | 11.5.12 Mit synchronized nachträglich synchronisieren
|  |  | 11.5.13 Monitore sind reentrant – gut für die Geschwindigkeit
|  |  | 11.5.14 Synchronisierte Methodenaufrufe zusammenfassen
|  |  | 11.5.15 Deadlocks
|  | 11.6 Synchronisation über Warten und Benachrichtigen
|  |  | 11.6.1 Die Schnittstelle Condition
|  |  | 11.6.2 It’s Disco-Time
|  |  | 11.6.3 Warten mit wait() und Aufwecken mit notify()
|  |  | 11.6.4 Falls der Lock fehlt: IllegalMonitorStateException
|  |  | 11.6.5 Semaphor
|  | 11.7 Atomare Operationen und frische Werte mit volatile
|  |  | 11.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen
|  |  | 11.7.2 Das Paket java.util.concurrent.atomic
|  | 11.8 Mit dem Thread verbundene Variablen
|  |  | 11.8.1 ThreadLocal
|  |  | 11.8.2 InheritableThreadLocal
|  | 11.9 Gruppen von Threads in einer Thread-Gruppe
|  |  | 11.9.1 Aktive Threads in der Umgebung
|  |  | 11.9.2 Etwas über die aktuelle Thread-Gruppe herausfinden
|  |  | 11.9.3 Threads in einer Thread-Gruppe anlegen
|  |  | 11.9.4 Methoden von Thread und ThreadGroup im Vergleich
|  | 11.10 Zeitgesteuerte Abläufe
|  |  | 11.10.1 Die Klassen Timer und TimerTask
|  |  | 11.10.2 Job-Scheduler Quartz
|  | 11.11 Einen Abbruch der virtuellen Maschine erkennen
|  | 11.12 Zum Weiterlesen
## 11.10 Zeitgesteuerte Abläufe 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 ### 11.10.1 Die Klassen 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 11.33 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. Hier klicken, um das Bild zu vergrößern Listing 11.34 com/tutego/insel/thread/timer/TimerTaskDemo.java, TimerTaskDemo
    public class TimerTaskDemo
    {
      public static void main( String[] args )
      {
        Timer timer = new Timer();

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

        // Start in 2 seconds then run every 5 seconds
        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.
### 11.10.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 Fabrikfunktion:
    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://www.onjava.com/lpt/a/4637. ### 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 ist auch eine Insel Jetzt bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Tipp
| Coding for Fun
Buchempfehlungen
| Objektorientierte Programmierung
| Einstieg in Eclipse 3.4
| Java 6 lernen mit Eclipse
| NetBeans Platform 6
| Java und XML
| Visual C# 2008
| IT-Handbuch für Fachinformatiker
| C++ von A bis Z
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 2009
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