java 线程池

在分析java线程池源码之前,先对线程池作一个简单的介绍和铺垫。

在开发中,经常有两个与"池"相关的东西出现在我们的视野中:一个是连接池;另一个是线程池。为什么要使用它们呢?我想原因有两个:

1)不管创建一个连接池还是线程池,它们的性能开销还是十分大的;
2)连接的数量有一个边界,不可能来一个就创建一个,启到以有限的资源去处理未知的请求。

总言之,"池"是为了提升系统的性能而设计出来的。

那么在分析线程池之前,我想有几个概念需要理解清楚了。

[b]1.线程任务[/b]
这个就是你submit或者execut的具体的线程任务了,即就是你自己定义处理具体逻辑的线程。

[b]2.工作线程(work_thread)[/b]
在初始时,需要建立一定数量的线程,这些线程就是工作线程,它的任务就是从等待队列中取出线程来执行。

[b]3.线程等待队列[/b]
如果要处理的线程数量大于work_thread的数量,那么有些线程就要进入等待队列中了,当然这样的描述是不全面的,因为在 ThreadPoolExecutor中有各个参数明确的定义。

所以一个简易的线程池的结构如下:

//构造函数:初始化工作线程

public ThreadPool(int size){
work_threads=new WorkThread[size];
for(int i=0;i<size;i++){
work_threads[i]=new WorkThread();
}
}



//WorkThread的run方法实现

public void run(){
Runnable r=null;
while(true){
//线程等待队列为空则等待
if(taskQueue.size()==0){
wait(20);
}

if((r==taskQueue.get()!=null)){
r.run();
r=null;
}
}
}



//execute方法的实现
public void execute(Runnable r){
taskQueue.add(r);
taskQueue.notify();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值