View Javadoc
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   * @author code4crafter@gmail.com
13   * @since 0.4.1
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  }