Dovrei usare istanze separate di ScriptEngine e CompiledScript per ogni thread?

Il mio programma utilizza l’API di scripting Java e può valutare contemporaneamente alcuni script. Non usano oggetti script condivisi, binding o Context, ma possono usare gli stessi oggetti ScriptEngine e CompiledScript . Vedo che l’implementazione di Oracle Nashorn in Java 8 non è multithread, ScriptEngineFactory.getParameter('THREADING') restituisce null su cui la documentazione dice:

L’implementazione del motore non è thread-safe e non può essere utilizzata per eseguire script contemporaneamente su più thread.

Significa che dovrei creare un’istanza separata di ScriptEngine per ogni thread? Inoltre, la documentazione non dice nulla sull’uso concorrente di CompiledScript ma:

Ogni CompiledScript è associato a ScriptEngine

Si può presumere che la sicurezza del thread CompiledScript dipenda dallo ScriptEngine correlato, ovvero dovrei usare un’istanza CompiledScript separata per ogni thread con Nashorn.

Se dovessi, qual è la soluzione appropriata per questo caso (penso molto comune), usando ThreadLocal , un pool o qualcos’altro?

  final String script = "..."; final CompiledScript compiled = ((Compilable)scriptEngine).compile(script); for (int i=0; i<50; i++) { Thread thread = new Thread () { public void run() { try { scriptEngine.eval(script, new SimpleBindings ()); //is this code thread-safe? compiled.eval(new SimpleBindings ()); //and this? } catch (Exception e) { throw new RuntimeException (e); } } }; threads.start(); }