Skip to content

Commit

Permalink
Polish warning about virtual threads and the JVM exiting
Browse files Browse the repository at this point in the history
Closes gh-39732
  • Loading branch information
wilkinsona committed Feb 23, 2024
1 parent d817c19 commit 490161c
Showing 1 changed file with 4 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -387,11 +387,10 @@ If you're running on Java 21 or up, you can enable virtual threads by setting th
Before turning on this option for your application, you should consider https://docs.oracle.com/en/java/javase/21/core/virtual-threads.html[reading the official Java virtual threads documentation].
In some cases, applications can experience lower throughput because of "Pinned Virtual Threads"; this page also explains how to detect such cases with JDK Flight Recorder or the `jcmd` CLI.

WARNING: One side effect of virtual threads is that these threads are daemon threads.
A JVM will exit if there are no non-daemon threads.
This behavior can be a problem when you rely on, e.g. `@Scheduled` beans to keep your application alive.
WARNING: One side effect of virtual threads is that they are daemon threads.
A JVM will exit if all of its threads are daemon threads.
This behavior can be a problem when you rely on `@Scheduled` beans, for example, to keep your application alive.
If you use virtual threads, the scheduler thread is a virtual thread and therefore a daemon thread and won't keep the JVM alive.
This does not only affect scheduling, but can be the case with other technologies, too!
This not only affects scheduling and can be the case with other technologies too.
To keep the JVM running in all cases, it is recommended to set the property configprop:spring.main.keep-alive[] to `true`.
This ensures that the JVM is kept alive, even if all threads are virtual threads.

0 comments on commit 490161c

Please sign in to comment.