Codeoptimierung in Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Threads zu erstellen ist teuer!
$$
Thread-Pools:
ExecutorService verwaltet// Fester Thread-Pool mit 4 Threads ExecutorService fixedPool = Executors.newFixedThreadPool(4);// Dynamischer Thread-Pool, der bei Bedarf wächst ExecutorService cachedPool = Executors.newCachedThreadPool();// Single-Thread-Executor ExecutorService singleExecutor = Executors.newSingleThreadExecutor();
ExecutorService executor = Executors.newFixedThreadPool(4);
// Aufgabe ohne Rückgabewert übergeben
executor.execute(() -> System.out.println("Simple task"));
// Aufgabe mit Rückgabewert (Callable) übergeben
Future<Integer> future = executor.submit(() -> {
Thread.sleep(1000);
return 42;
});
// Ergebnis aus Future holen (blockiert bis fertig)
int result = future.get();
// Beenden signalisieren, laufende Aufgaben dürfen fertig werden executor.shutdown();// Auf Beendigung warten (mit Timeout) boolean terminated = executor.awaitTermination(5, TimeUnit.SECONDS);// Sofortiges Beenden erzwingen, laufende Aufgaben abbrechen executor.shutdownNow();
CompletableFutureFunction abgeschlossen werden// Asynchron mit Standard-Executor ausführen CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> performTask());// Asynchron mit benutzerdefiniertem Executor liefern ExecutorService executor = Executors.newCachedThreadPool(); CompletableFuture<String> supplyAsync = CompletableFuture.supplyAsync(() -> fetchData(), executor);
CompletableFuture<String> future = CompletableFuture
.supplyAsync(() -> fetchUserData(userId))
.thenApply(data -> extractUsername(data))
.exceptionally(ex -> "Unknown user");
// Zugriff auf Ergebnis, sobald bereit
future.thenAccept(result -> System.out.println(result));
Codeoptimierung in Java