package edu.fudan.ml.classifier.linear; import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import edu.fudan.ml.types.Instance; import edu.fudan.nlp.pipe.SeriesPipes; public class ClassifierPool { private ExecutorService pool; private int numThread; private Linear classifier; ArrayList<Future> f ; private SeriesPipes pp; public ClassifierPool(int numThread2){ numThread = numThread2; pool = Executors.newFixedThreadPool(numThread); f= new ArrayList<Future>(); } public void classify(String c) throws Exception{ Instance inst = new Instance(c); ClassifyTask t = new ClassifyTask(inst); f.add(pool.submit(t)); } public String getRes(int i) throws Exception { // TODO Auto-generated method stub return (String) f.get(i).get(); } class ClassifyTask implements Callable { private Instance inst; public ClassifyTask(Instance inst) { this.inst = inst; } public String call() { try { pp.addThruPipe(inst); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } String type = classifier.getStringLabel(inst); return type; } } public void loadFrom(String modelfile) throws Exception { classifier= Linear.loadFrom(modelfile); pp = (SeriesPipes) classifier.getPipe(); } public void reset() { pool.shutdownNow(); pool=Executors.newFixedThreadPool(numThread); f= new ArrayList<Future>(); } }