Torna al blog
JavaConcorrenzaPerformance

Java: concorrenza e virtual threads

MUSTNODE SRL8 min di lettura

Concorrenza senza sprechi

Gestire migliaia di richieste simultanee in Java ha sempre significato fare i conti con i thread di piattaforma, costosi in memoria e limitati nel numero. I virtual thread, introdotti nel Java recente, cambiano radicalmente questo scenario.

Thread di piattaforma e pool

Tradizionalmente si usano pool di thread per riutilizzare risorse costose. Il pool limita il parallelismo per non saturare il sistema, ma diventa un collo di bottiglia quando le operazioni sono I/O bound e i thread restano in attesa.

ExecutorService pool = Executors.newFixedThreadPool(200);
pool.submit(() -> chiamaServizioEsterno());

I virtual thread

Un virtual thread e gestito dalla JVM, non dal sistema operativo: e leggerissimo, e se ne possono creare milioni. Quando si blocca su un'operazione di I/O, la JVM lo sgancia dal thread portante, liberandolo per altro lavoro.

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    for (int i = 0; i < 10_000; i++) {
        executor.submit(() -> chiamaServizioEsterno());
    }
}

Quando usarli

I virtual thread brillano nei carichi con molta attesa I/O, come server web e client di servizi remoti, dove permettono di scrivere codice bloccante semplice ma scalabile. Per lavoro CPU intensivo restano validi i pool tradizionali.

In MUSTNODE SRL adottiamo i virtual thread per costruire backend Java capaci di gestire un'alta concorrenza con codice leggibile, senza la complessita della programmazione asincrona esplicita.

Articoli correlati

Altri approfondimenti dalla categoria Backend & Java.