An way that looked to fit to me is:
public ScriptEngine getScriptEngine() {
if (queue.isEmpty()) {
ScriptEngine scriptEngine = new Juel4AppnameScriptEngine(this);
try {
queue.put(scriptEngine);
} catch (InterruptedException e) {
e.printStackTrace();
}
return scriptEngine;
} else {
while (!queue.isEmpty()) {
try {
Thread.sleep(1 * 100L);
} catch (Exception e) {
e.printStackTrace();
}
}
ScriptEngine scriptEngine = new Juel4AppnameScriptEngine(this);
try {
queue.put(scriptEngine);
} catch (InterruptedException e) {
e.printStackTrace();
}
return scriptEngine;
}
}
Then in Juel4AppnameScriptEngine I use "Juel4ImpressionScriptEngineFactory.queue.poll();" before return eval method.