如果您无法更改该AOT编译的代码,因为它真的不在您的控制范围之内,那么您是否可以评估以下代码,并在系统启动时确保它在调用多个线程从`require`之前被执行,当然,`println`是可选的。
(def original-require clojure.core/require)
(defn my-serialized-require [& args]
(locking clojure.lang.RT/REQUIRE_LOCK
(println "my-serialized-require acquired the lock...")
(apply original-require args)
(println "my-serialized-require releasing lock...")))
(alter-var-root #'clojure.core/require (fn [& args] my-serialized-require))
如果这也不适用于您,您是否允许编译Clojure源代码的修改版本并将其用于您的项目?如果是这样,您可以修改`require`定义以使用锁定版本。