Пакет javax.script является поточно-ориентированным, но если ваш сценарий нет, у вас могут возникнуть проблемы с параллелизмом.
Глобальные переменные внутри скрипта видны всем потокам. Итак, избегайте использования глобальных переменных внутри ваших функций JavaScript
Я сейчас сталкиваюсь с этой проблемой. Мой JavaScript-код выглядит следующим образом:
function run(){
regex = 0;
regex += 1;
return regex;
}
И я запускаю его внутри ThreadPool (4) 10.000 раз и печатаю результат.
for (int i = 0; i <= 10000; i++){
executor.submit(new Runnable() {
@Override
public void run() {
try {
Double result = (Double) invocable.invokeFunction("run");
System.out.println(result);
} catch (Exception e) {}
}
});
}
Это часть вывода:
1.0
2.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
2.0
1.0
1.0
0.0