`

查看ScriptEngine线程安全

    博客分类:
  • jdk
阅读更多
通过 javax.script 的接口 ScriptEngineFactory


getParameter
Object getParameter(String key)返回属性值,该属性的含义可能是特定于实现的。其值在所有实现中定义的键有:
ScriptEngine.ENGINE
ScriptEngine.ENGINE_VERSION
ScriptEngine.NAME
ScriptEngine.LANGUAGE
ScriptEngine.LANGUAGE_VERSION
用于这些键的值分别是 getEngineName、getEngineVersion、getName、getLanguageName 和 getLanguageVersion 返回的 String。

还定义了保留键 THREADING,它的值描述了与脚本并发执行和状态维护有关的引擎行为。用于 THREADING 键的值有:



null - 引擎实现不是线程安全的,并且无法用来在多个线程上并发执行脚本。

"MULTITHREADED" - 引擎实现是内部线程安全的,并且脚本可以并发执行,尽管在某个线程上执行脚本的效果对于另一个线程上的脚本是可见的。

"THREAD-ISOLATED" - 该实现满足 "MULTITHREADED" 的要求,并且引擎为不同线程上执行的脚本中的符号维护独立的值。

"STATELESS" - 该实现满足 "THREAD-ISOLATED" 的要求。此外,脚本执行不改变 Bindings 中的映射关系,该 Bindings 是 ScriptEngine 的引擎范围。具体来说,Bindings 及其关联值中的键在执行脚本之前和之后是相同的。



实现可以定义特定于实现的键。

参数:
key - 参数名
返回:
给定参数的值。如果没有为键分配值,则返回 null。

来源JDK文档


ScriptEngineManager factory = new ScriptEngineManager();
        
 ScriptEngine engine = factory.getEngineByName("js");      
        
 ScriptEngineFactory sef=engine.getFactory();
 System.out.println( sef.getParameter(ScriptEngine.LANGUAGE));
 System.out.println( sef.getParameter("THREADING"));
 System.out.println(engine.eval("((1+1)*9+9.6)*(8+9-8)"));


运行结果:

ECMA Script
MULTITHREADED
248.4

我的实践 证明 js 的线程 内部安全的!可以设立单例模式,提高代码性能了!




0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics