Wie benutzt man den ExectorService mit virtual Threads in Java 21
29. Februar 2024Java 21 hat uns die virtual Threads gegeben. Sie sind nicht gebunden an OS Threads und daher kann man sehr viele erstellen und brauch sie auch nicht zu poolen. Besser ist es einfach für jede Aufgabe einen neuen virtuellen Thread zu erstellen und der JVM die Aufgabe zu überlassen diese auf native Threads zu verteilen.
Die Frage ist, wie kann man bestehenden Code, der den ExecutorService
oder den ScheduledExecutorService
benutzt, auf virtual Threads umstellen.
Für den ExecutorService
gibt es nun die Methode Executors.newVirtualThreadPerTaskExecutor()
. Wenn man z.B. auch den Thread namen beeinflussen möchte, geht das wie folgt:
ThreadFactory threadFactory = Thread.ofVirtual().name("virtualThread").factory();
ExecutorService service = Executors.newThreadPerTaskExecutor(threadFactory);
Für den ScheduledExecutorService
kann man folgenden Code verwenden:
ThreadFactory threadFactory = Thread.ofVirtual().name("virtualThread").factory();
ScheduledExecutorService service = Executors.newScheduledThreadPool(0, threadFactory);