18 线程池,线程安全队列,线程创建

参考  :  http://blog.csdn.net/madun/article/details/20313269

 

创建线程池

ExecutorService  service= Executors.newFixedThreadPool(nThreads);

提交线程:

 //TODO  有返回状态处理
            service.submit(new LoadDataThread(startDocId, endDocId, luceneFileDir,this.queue,this.docs));

线程安全队列:

LinkedBlockingQueue<Document> queue=new LinkedBlockingQueue<Document>(this.numDocs);

BlockingQueue,顾名思义,“阻塞队列”:可以提供阻塞功能的队列。 
首先,看看BlockingQueue提供的常用方法: 

从上表可以很明显看出每个方法的作用,这个不用多说。我想说的是: 
  • add(e) remove() element() 方法不会阻塞线程。当不满足约束条件时,会抛出IllegalStateException 异常。例如:当队列被元素填满后,再调用add(e),则会抛出异常。
  • offer(e) poll() peek() 方法即不会阻塞线程,也不会抛出异常。例如:当队列被元素填满后,再调用offer(e),则不会插入元素,函数返回false。
  • 要想要实现阻塞功能,需要调用put(e) take() 方法。当不满足约束条件时,会阻塞线程。

 

线程创建:

/**
 * 加载数据线程
 */
public class LoadDataThread implements Runnable

 

posted @ 2016-09-20 11:36  life_start  阅读(245)  评论(0编辑  收藏  举报