Code optimaliseren in Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Threads aanmaken is duur!
$$
Threadpools:
ExecutorService-interface// Vaste threadpool met 4 threads ExecutorService fixedPool = Executors.newFixedThreadPool(4);// Cached threadpool die groeit indien nodig ExecutorService cachedPool = Executors.newCachedThreadPool();// Single-threaded executor ExecutorService singleExecutor = Executors.newSingleThreadExecutor();
ExecutorService executor = Executors.newFixedThreadPool(4);
// Taak indienen zonder returnwaarde
executor.execute(() -> System.out.println("Eenvoudige taak"));
// Taak indienen met returnwaarde (Callable)
Future<Integer> future = executor.submit(() -> {
Thread.sleep(1000);
return 42;
});
// Resultaat uit Future ophalen (blokkeert tot voltooid)
int result = future.get();
// Afsluiting starten, bestaande taken gaan door executor.shutdown();// Wachten op beëindiging (met timeout) boolean terminated = executor.awaitTermination(5, TimeUnit.SECONDS);// Direct geforceerd afsluiten, lopende taken annuleren executor.shutdownNow();
CompletableFutureFunction worden voltooid// Async uitvoeren met standaard executor CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> performTask());// Async leveren met eigen executor 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");
// Toegang tot resultaat zodra gereed
future.thenAccept(result -> System.out.println(result));
Code optimaliseren in Java