我正在使用 clojure.lang.RT (使用clojure-1.4.0.jar)在运行时评估应用程序最终用户提供的许多脚本,例如:
return (Boolean) RT.var("clojure.core", "eval").invoke(RT.var("clojure.core", "read-string").invoke(script))
......和:
IFn fn = (IFn) RT.var("clojure.core", "eval").invoke(RT.var("clojure.core", "read-string").invoke(script))
鉴于 var 方法是静态的,我可以假设 clojure.lang.RT API的上述用法是线程安全的吗?
答案 0 :(得分:1)
对RT.var的调用与您调用的脚本一样是线程安全的。如果您运行了两个脚本,每个脚本通过调用def
或defn
来更改某些var,则这两个脚本可能会获得对vars内容的相互不一致的视图。一般来说,这很可能是安全的。