Salute e malattia
Threading implicito in Java astrae la gestione del ciclo di vita dei thread attraverso thread pool, permettendo agli sviluppatori di sottomettere task senza creare, avviare o gestire manualmente i thread. L'interfaccia ExecutorService e la factory class Executors sono le API primarie.
new Thread(runnable).start() per task| Factory Method | Comportamento | Caso d'uso |
|---|---|---|
newFixedThreadPool(n) | Esattamente n thread; coda illimitata | Concorrenza stabile; task CPU-bound |
newCachedThreadPool() | Crea se necessario; riusa idle (timeout 60s); illimitato | Task burst, breve durata; I/O-bound |
newSingleThreadExecutor() | Un thread; garanzia esecuzione sequenziale | Serializzazione, event loop, processing ordinato |
newScheduledThreadPool(n) | Core fisso; supporta task ritardati/periodici | Scheduling, retry, cleanup, heartbeat |
newWorkStealingPool() | ForkJoinPool; target parallelismo | Divide-et-impera ricorsivo (ForkJoinTask) |
ThreadPoolExecutor.AbortPolicy, CallerRunsPolicy)Future per recupero risultatiimport java.util.concurrent.*; import java.util.stream.*; public class ImplicitThreadingDemo { public static void main(String[] args) throws InterruptedException { // Fixed pool: 4 thread per lavoro CPU-bound ExecutorService pool = Executors.newFixedThreadPool(4); // Sottometti 10 task IntStream.range(0, 10).forEach(i -> pool.submit(() -> { String thread = Thread.currentThread().getName(); System.out.printf("Task %d running on %s%n", i, thread); // Simula lavoro try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } return "Result-" + i; }) ); // Shutdown graceful pool.shutdown(); pool.awaitTermination(1, TimeUnit.MINUTES); // Alternativa moderna: Virtual threads (Java 21+) // try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { ... } } }
supplyAsync, thenCompose, allOf)getActiveCount(), getQueue(), getCompletedTaskCount() via JMX/MicrometerExecutors.newVirtualThreadPerTaskExecutor() — leggeri, milioni possibili, ideali per high-concurrency I/Oshutdown() + awaitTermination())ThreadFactoryBuilder)RejectedExecutionException gracefulCompletableFuture per workflow dipendenti da risultatiThreading implicito via thread pool è lo standard per applicazioni Java concorrenti — bilanciando semplicità, performance e controllo.
Infertilità