Schreiben Sie ein Java-Programm (Konsole), welches einen Verzeichnisnamen einliest und dann die Anzahl der Zeilen jeder Datei in diesem Verzeichnis ausgibt. Das Verzeichnis sollte nur Textdateien enthalten (z.B. Quelltext).
LineCounterNebenläufig, die den Verzeichnisnamen einliest und für jede Datei einen Thread erzeugt. LineCounterRunnable, die die Schnittstelle Runnable implementiert.join() auf das Ende aller gestarteten Threads. LineCounterSequentiell, die die Dateien sequentiell ohne Nutzung von Threads liest.System.currentTimeMillis(): Einmal mit wenigen großen Dateien, einmal mit vielen kleinen Dateien.Hinweise:
LineNumberReader zur Bestimmung der Zeilenzahl.System.currentTimeMillis() kann nach folgendem Schema passieren:long startZeit = System.currentTimeMillis(); // Codestück, für das die Zeit gemessen werden soll long dauerInMS = System.currentTimeMillis() - startZeit;
Die nebenläufige Variante LineCounterApp des Programms soll nun zu LineCounterAppSorted so erweitert werden, dass das
Ergebnis erst zu Ende aller Zählvorgänge ausgegeben werden soll. Die Ausgabe erfolgt absteigend sortiert nach Zeilenzahl.
Die Threads sollen dazu Ihr Ergebnis jeweils in eine gemeinsame HashMap<String, Integer> eintragen, welche als
gemeinsame Ressource durch geeignete synchronized-Bereiche oder Methoden abgesichert sein soll.
Hinweise:
Thread.join() warten.Map<String, Integer> m erhalten Sie als Array mit String[] keys = (String[])m.keySet().toArray().a können Sie mit Hilfe von Arrays.sort(a, comp) sortieren, wobei Sie einen eigenen Comparator<String> comp für den Vergleich der Dateien implementieren müssen1.
Erstellen Sie eine JavaFX-Anwendung für eine Stoppuhr.
Die Stoppuhr soll mit Start gestartet und mit Stop wieder angehalten werden können. Mit Reset können Sie sowohl bei angehaltener wie bei laufender Stoppuhr die Zeit zurücksetzen.
Erstellen Sie einen eigenen Thread der die eigentliche Stoppuhr realisiert. Der Thread sollte jeweils über sichere JavaFX-Methoden innerhalb des UI threads die Anzeige aktualisieren.
Hinweise:
wait() warten lassen, bis er durch den Startvorgang aktiviert wird – beide Ansätze sind möglich!Platform.runLater() um ein Runnable an den UI thread zu senden.Siehe Java 7 API Specification und Skript 6.38. ↩