если вы одновременно запускаете один и тот же экземпляр скрипта в разных потоках, он может быть остановлен только логикой вашего скрипта.
если вы хотите кэшировать проанализированный скрипт, сохраните в вашей картеразбирается класс а не экземпляр скрипта и для каждого запуска перепривязывает переменные.
следующий фрагмент кода должен дать вам представление, как это сделать:
scriptMap = new HashMap()
Script getScript(String code){
Class<Script> scriptClass = scriptMap.get(code);
if(scriptClass)return script.newInstance();
GroovyShell shell = new GroovyShell();
Script script = shell.parse( code );
scriptMap.put(code, script.getClass());
return script;
}
Object runScript(String code, Map variables){
Script script=getScript(code);
script.setBinding( new Binding(variables) );
return script.run();
}
println runScript("a+b", [a:2,b:7])
println runScript("(b-a)*3", [a:7,b:9])
println scriptMap