packagecom.example.demo.test;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.LinkedBlockingQueue;importjava.util.concurrent.ThreadPoolExecutor;importjava.util.concurrent.TimeUnit;public classQuickEmailToWikiExtractor{privateThreadPoolExecutor threadPool;private BlockingQueueemailQueue;publicQuickEmailToWikiExtractor() {
emailQueue= new LinkedBlockingQueue();int corePoolSize = Runtime.getRuntime().availableProcessors() * 2;
threadPool= new ThreadPoolExecutor(corePoolSize, corePoolSize,101, TimeUnit.SECONDS, new LinkedBlockingQueue(2000));
}//每五分钟执行一次
public voidexetract(){
System.out.println("开始");long start =System.currentTimeMillis();//抽取所有的邮件放到队列中
newExtractEmailTask().start();//把队列的文章插入Wiki
insertToWiki();long end =System.currentTimeMillis();double cost = (end - start) / 1000;
System.out.println("完成,花费时间=" + cost + "秒。");
}//把队列中的文章插入到Wiki
private voidinsertToWiki(){while(true){//2s读取不到就退出
ExchangeEmailShallowDTO email;try{
email= emailQueue.poll(2, TimeUnit.SECONDS);if(email == null){break;
}
threadPool.execute(newInsertToWikiTask(email));
}catch(InterruptedException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
}protected voidextractEmail(){
List allEmails = new ArrayList();//这里是抽取出的所有邮件
int i = 0;while(i++<10){
allEmails.add(newExchangeEmailShallowDTO());
}if(allEmails == null){return;
}for(ExchangeEmailShallowDTO email: allEmails){
emailQueue.offer(email);
}
}//抓取邮件线程
class ExtractEmailTask extendsThread{public voidrun(){
System.out.println("抽取邮件。。。");
extractEmail();
}
}class InsertToWikiTask implementsRunnable{privateExchangeEmailShallowDTO email;publicInsertToWikiTask(ExchangeEmailShallowDTO email){this.email =email;
}public voidrun() {
System.out.println(Thread.currentThread().getName()+ "把一个邮件插入到Wiki=" +System.currentTimeMillis());
}
}public static voidmain(String[] args) {
QuickEmailToWikiExtractor mail= newQuickEmailToWikiExtractor();
mail.exetract();
}
}classExchangeEmailShallowDTO{
}