欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 线程池

程序员文章站 2022-04-19 13:53:29
...
在分析java线程池源码之前,先对线程池作一个简单的介绍和铺垫。

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

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

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

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

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

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

3.线程等待队列
  如果要处理的线程数量大于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();
}