1 package us.codecraft.webmagic.scripts;
2
3 import javax.script.ScriptEngine;
4 import javax.script.ScriptEngineManager;
5
6 import us.codecraft.webmagic.scripts.languages.Language;
7
8 import java.util.concurrent.LinkedBlockingQueue;
9 import java.util.concurrent.atomic.AtomicInteger;
10
11
12
13
14
15 public class ScriptEnginePool {
16
17 private final AtomicInteger availableCount;
18
19 private final LinkedBlockingQueue<ScriptEngine> scriptEngines = new LinkedBlockingQueue<ScriptEngine>();
20
21 public ScriptEnginePool(Language language,int size) {
22 this.availableCount = new AtomicInteger(size);
23 for (int i=0;i<size;i++){
24 ScriptEngineManager manager = new ScriptEngineManager();
25 ScriptEngine engine = manager.getEngineByName(language.getEngineName());
26 scriptEngines.add(engine);
27 }
28 }
29
30 public ScriptEngine getEngine() {
31 availableCount.decrementAndGet();
32 return scriptEngines.poll();
33 }
34
35 public void release(ScriptEngine scriptEngine){
36 scriptEngines.add(scriptEngine);
37 availableCount.incrementAndGet();
38 }
39
40 }