Nils Rudolph
Dem Ingeniör ist nichts zu schwör! - Daniel Düsentrieb
Über mich

Wie benutzt man den ExectorService mit virtual Threads in Java 21

29. Februar 2024

Java 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);