ExecutorService unter Java nutzen

Wenn unter Java die Ausführung von Quelltext parallelisiert werden soll, so können hierfür Threads genutzt werden:

Thread thread = new Thread(new TestRunnable());
thread.start();

In diesem Beispiel wird für eine auszuführende Aufgabe ein Thread erstellt und dieser anschließend gestartet. Nun kann es Fälle geben, in welchem mehrere Threads die gleiche Aufgabe ausführen sollen, allerdings nicht unbedingt die entsprechende Anzahl von Threads angelegt werden soll. Für eine solche Aufgabe eignet sich ein ExecutorService. Im ersten Schritt sollte ein Runnable definiert werden. In diesem Interface wird eine run-Methode definiert, die den auszuführenden Quellcode enthält:

public static class TestRunnable implements Runnable {

    @Override
    public void run() {
        // Do something
    }
}

Nun kann der ExecutorService angelegt werden und mit einem Threadpool ausgestattet werden. Anschließend werden die neuen Instanzen des Runnable, mittels der execute-Methode, an den ExecutorService übergeben.

// Executor service
ExecutorService executorService = Executors.newCachedThreadPool();

// Add jobs to executor service
for (int i = 0; i < 100; i++) {
    executorService.execute(new TestRunnable());
}

// Shutdown executor service
executorService.shutdown();
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);

Damit würden die Aufgaben abgearbeitet. Allerdings würde der ExecutorService nun bis zu einem Timeout noch bestehen bleiben. Stattdessen wird er im Beispiel kontrolliert heruntergefahren. Nach der Ausführung der shutdown-Methode nimmt der ExecutorService keine neuen Aufträge mehr an; bestehende Aufträge werden allerdings noch abgearbeitet. Über die Methode awaitTermination wird sichergestellt das der Service wartet, bis alle Aufgaben abgearbeitet sind. Bei der Methode wird ein Timeout angegeben, nach welchem der Service zwangsweise abgeschaltet wird. Damit werden die Aufgaben Stück für Stück abgearbeitet, ohne entsprechende viele Threads zu öffnen. Stattdessen werden Threads aus dem Threadpool wiederverwendet.

Funklöcher in Deutschland

Mit der Breitbandmessung/Funkloch-App ist es auf Smartphones unter anderem möglich die Signalstärke und die Mobilfunkabdeckung zu messen. Dazu werden bei der Nutzung der App eine Reihe von Messwerten erfasst.

Breitbandmessung
Preis: Kostenlos
Breitbandmessung
Preis: Kostenlos

Seit einigen Tagen wurden diese Messwerte in eine Karte gegossen und zur Verfügung gestellt.

Die Karte unter breitbandmessung.de

Weiße Bereiche in der Karte zeigen Bereiche an, in welchem zu wenige Daten vorlagen. Alle andere Bereiche sind anhand der Verfügbarkeit eingefärbt. Zu finden ist die Karte auf breitbandmessung.de.

Apple

In der heutigen Folge von Deus ex machina rede ich mit Maik über Apple. Dabei wagen wir eine persönliche Betrachtung von Apple, seinen Produkten, der Hard- und Software und vielem mehr aus dem Apple-Universum, wie der Preispolitik und der Reparierbarkeit der Produkte.

Ein Macbook Air

Der im Podcast angesprochene Artikel des Wall Street Journals trägt den Titel Appl Still Hasn’t Fixd Its MacBook Kyboad Problm.

Falls noch nicht geschehen, könnt ihr Deus ex machina in eurem Podcatcher abonnieren oder eine Bewertung auf Apple Podcasts hinterlassen. Daneben ist die Unterstützung über Tone H möglich.

Leere Ordner im Terminal unter macOS löschen

Beim digitalen Aufräumen unter macOS fiel mir eine Ordnerstruktur auf, in welcher viele leere Ordner waren. Da ich diese nicht von Hand löschen wollte, nutze ich das Terminal:

cd folder/
find . -type d -empty -delete

Im ersten Schritt wechselte ich in das entsprechende Verzeichnis. Anschließend wird die eigentliche Arbeit mit dem find-Befehl erledigt. Mithilfe des Befehls werden in diesem Falle alle leeren Ordner gesucht und postwendend gelöscht.