1.存入队列 2.获取队列的数据,交给其他线程处理;(并不是多线程获取队列里的数据)
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
public class ArticleThread {
private ExecutorService executorService;
private BlockingQueue<String> queue ;
public ArticleThread(){
queue = new LinkedBlockingQueue<String>(10);
int core=Runtime.getRuntime().availableProcessors();
executorService =Executors.newFixedThreadPool(core*2);
}
public BlockingQueue<String> getQueue() {
return queue;
}
public void setQueue(BlockingQueue<String> queue) {
this.queue = queue;
}
private void insert(){
while(true){
try {
//等待2秒退出
String val=queue.poll(2, TimeUnit.SECONDS);
if(val == null){
executorService.shutdown();
break;
}
executorService.submit(new Thread(new InsertThread(val)));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ArticleThread articleThread=new ArticleThread();
new ExtractEmailTask(articleThread.getQueue()).start(); //抽取所以邮件放入队列中
articleThread.insert();//从队列中获取数据,启动线程池里的现场解析email里的数据
System.out.println("结束,,,,");
}
}
import java.util.concurrent.BlockingQueue;
public class ExtractEmailTask extends Thread{
BlockingQueue<String> queue;
public ExtractEmailTask(BlockingQueue<String> queue){
this.queue=queue;
}
@Override
public void run() {
for(int i=0;i<10;i++){
boolean f=queue.offer(i+"");
}
}
}
public class InsertThread implements Runnable{
String val="";
public InsertThread(String val){
this.val=val;
}
@Override
public void run() {
System.out.println("插入文章:"+val);
}
}