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

Posted life_start

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于18 线程池,线程安全队列,线程创建的主要内容,如果未能解决你的问题,请参考以下文章

Linux入门多线程(线程概念生产者消费者模型消息队列线程池)万字解说

图解为什么要使用线程池?

线程应用: 线程池的实现

Linux入门多线程(线程概念生产者消费者模型消息队列线程池)万字解说

Linux入门多线程(线程概念生产者消费者模型消息队列线程池)万字解说

Java核心技术读书笔记10-2 阻塞队列线程安全集合类Callable与Future线程池与任务组同步框架