20 October 2023
Alex Miller
Clojure 1.12.0-alpha5 is now available and we encourage you to try it and give us your feedback!
Clojure users want to use virtual threads on JDK 21. Prior to 1.12, Clojure lazy-seqs and delays, in order to enforce run-once behavior, ran user code under synchronized blocks, which don’t participate in cooperative blocking. Thus if that code did e.g. blocking I/O it would pin a real thread. JDK 21 may emit warnings for this when using -Djdk.tracePinnedThreads=full
. To avoid this pinning, in 1.12 we’ve changed lazy-seqs and delay to use locks instead of synchronized blocks.