Usare i virtual threads in Java

Mattepuffo's logo
Usare i virtual threads in Java

Usare i virtual threads in Java

I virtual threads sono una novità di Java per usare la concorrenza.

Ci sono svariate differenze tra i platform threads (quelli "classici" per intenderci) e i virtual threads.

La più importante è che i platform threads sono gestiti dal sistema operativo, in sostanza dal kernel.

Mentre i virtual threads sono gestiti dalla JVM.

Per usare i virtual threads dobbiamo "attivarli"; se usate Maven:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <release>19</release>
                    <compilerArgs>
                        --enable-preview
                    </compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

Qui sotto un esempio di codice:

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        boolean useVthreads = false;

        long start = System.currentTimeMillis();

        Random random = new Random();
        Runnable runnable = () -> {
            double d = random.nextDouble(1000) % random.nextDouble(1000);
        };

        for (int i = 0; i < 50000; i++) {
            if (useVthreads) {
                Thread.startVirtualThread(runnable);
            } else {
                Thread t = new Thread(runnable);
                t.start();
            }
        }

        long finish = System.currentTimeMillis();
        long timeElapsed = finish - start;
        System.out.println("TEMPO DI ESECUZIONE: " + timeElapsed);
    }
}

Cambiate la variabile useVthreads per usare uno o l'altro.

Ho fatto un pò di test, e mi sembrano più veloci i virtual threads.

Ovviamente andrebbero fatti dei test un pò più approfonditi.

Enjoy!


Condividi

Commentami!