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!
java threads maven virtual threads jvm startvirtualthread
Commentami!