JAVA线程池线程归还问题
代码如下:
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个任务线程就结束了。想请教怎么重复利用线程,即第一个任务线程执行完后把线程连接还给线程池,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
线程池的话,看下ThreadPoolExecutor吧