11.5

来源:互联网 发布:ctf源码泄露 编辑:程序博客网 时间:2024/06/01 10:43

昨天对线程池有所了解,用到了以下几个类

BlockingQueue queue 存放任务的队列

BlockingQueue queueThreadPool 存放线程任务的队列,在初始化线程池中用到

这里使用双队列的目的是,线程连接池里面用queueThreadPool初始化。需要处理的任务放在queue队列中,然后经过处理再加入到线程池队列中进行处理。优点是queue队列中存放的不要求必须是implements Runnable的类,任意类都可以。

ThreadPoolExecutor executor线程连接池

实现一个监听线程,里面存放上述属性,然后使用queue的take方法,将放入到队列中的任务取出,经过处理,调用executor的submit方法此方法是父类AbstractExecutorService的方法,因为这个方法的参数不光是继承线程类,同时也可以是实现Callable的类。好处是Callable与Runnable类似,但是call方法可以有返回值然而start方法不可以有。

目前线程池的了解就这么多,其他的都是网上能找到的。这里copy一份。

 

 

* ArrayBlockingQueue:一个由数组支持的有界队列。
* LinkedBlockingQueue:一个由链接节点支持的可选有界队列。
* PriorityBlockingQueue:一个由优先级堆支持的无界优先级队列。
* DelayQueue:一个由优先级堆支持的、基于时间的调度队列。
* SynchronousQueue:一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制

 

 

1、newFixedThreadPool创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。

2、newCachedThreadPool创建一个可缓存的线程池。这种类型的线程池特点是:
    1).工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。
    2).如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。

3、newSingleThreadExecutor创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它,保证顺序执行(我觉得这点是它的特色)。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的 。

4、newScheduleThreadPool创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于Timer。(这种线程池原理暂还没完全了解透彻)

详细介绍:

http://blog.csdn.net/waterbig/archive/2009/11/10/4794244.aspx

 

源码分析:

http://xtu-xiaoxin.javaeye.com/blog/647744

 

 

今天计划继续学习这个线程池,看下ipmonitor这个模块。




原创粉丝点击