JAVA线程池线程归还问题

李林古 发布于 2011/06/12 15:01
阅读 1K+
收藏 0
代码如下:
import java.util.LinkedList;


public class ThreadPool {
//线程队列
private LinkedList<Runnable> list = new LinkedList<Runnable>();
//最大线程数
public static final int MAX_THREAD_SIZE = 100;
//最大空闲线程
public static final int MAX_SPACE_SIZE = 50;
//最小空闲线程
public static final int MIN_SPACE_SIZE = 5;

/**
* 初始化线程池
*
*/
public ThreadPool(){
for(int i=0;i<MIN_SPACE_SIZE;i++) {
Thread th = new TWork();
th.start();
}

}

/**
* 从线程队列中获得下一个工作线程
* @return
* @throws InterruptedException
*/
public Runnable getNextWorkThread(){
Runnable work = null;
synchronized (list) {
try {
//如果线程队列为空,则等待在使用的工作线程释放
if(list.isEmpty())
list.wait();
work = list.removeLast();//先进先出
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return work;
}

public void execute(Runnable able){
synchronized (list) {
//添加到任务队列
list.addLast(able);
//唤醒队列中的一个线程
list.notify();
}

}

//工作线程内部类
private class TWork extends Thread{

@Override
public void run() {
Runnable able = getNextWorkThread();
able.run();
//list.addLast(this);
//notify();
}

}

public static void main(String[] args) throws InterruptedException {
ThreadPool pool = new ThreadPool();
for(int i=0;i<20;i++) {
MyThread my = new MyThread();
pool.execute(my);
}
}
}

问题:我初始化的时候只初始化了5个可用的线程连接,在Main里面我需要执行20个任务线程,现在的结果是只会执行5个任务线程就结束了。想请教怎么重复利用线程,即第一个任务线程执行完后把线程连接还给线程池,谢谢!
加载中
0
hunterli
hunterli
线程池的话,看下ThreadPoolExecutor吧
返回顶部
顶部