package bimoku.extract.main;
import java.io.File;
import java.util.Date;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.aspectj.org.eclipse.jdt.core.dom.ThisExpression;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import bimoku.extract.common.PropertyUtil;
import bimoku.extract.parser.Parser;
import bimoku.extract.parser.ParserAmazon;
public class Main {
private static ThreadPoolExecutor pool;
private static Long begain = System.currentTimeMillis();
private static ApplicationContext ctx = null;
private static Parser parser = null;
public static ApplicationContext getContext(){
if(ctx == null){
ctx = new ClassPathXmlApplicationContext("classpath:/beans.xml");
}
return ctx;
}
public static void extract(String configPath,Parser parser){
File file = new File(PropertyUtil.getProperty(configPath).getProperty("directory"));
File[] files = file.listFiles();
//创建一个固定大小[10]的线程池
//ExecutorService pool = Executors.newFixedThreadPool(10);
pool = new ThreadPoolExecutor(5, 10, 0, TimeUnit.SECONDS, new ArrayBlockingQueue(10));
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
String directoryitem = PropertyUtil.getProperty(configPath).getProperty("directory") + File.separator + files[i].getName();
Extract extract = new Extract(directoryitem,parser,configPath);
//把任务放到线程池的处理队列里面,等待处理
pool.execute(extract);
}
}
//处理完成后,关闭线程池
pool.shutdown();
isEndTask();
}
private static boolean isEndTask(){
while(true){
if(pool.getActiveCount()==0){
System.out.println(new Date());
System.out.printf("\nTIME %d ms", (System.currentTimeMillis() - begain) );
}
}
}
public static void main(String[] args) {
extract("amazonConfig.properties", (ParserAmazon)getContext().getBean("parserAmazon"));
}
}