线程池实现
线程池有以下几个部分:
1.完成主要任务的一个或多个线程.
2.用于调度管理的管理线程.
3.要求执行的任务队列.
?
?
一个线程池至少应该具有以下几个方面的功能:
1.提供一个任务接口以便用户加入任务
?
这里需要有两个组件,一是规定操作的任务接口:
?
class WorkThread extends Thread{ private TaskList list; //多个工作线程共同从一个任务队列中获取任务,所以要从外面传入一个任务队列. public WorkThread(String name,TaskList list){ super(name); this.list = list; } public void run(){ while(true){ ITask task = null; task = list.getTask(); if(task != null) task.task(); } }}?
?
这里还需要加入对线线程状态的判断.
?
然后需要有一个对工作线程的调度线程.完成以下几个功能:
1.生成需要的工作线程.由于创建线程需要一定的开销,一定要注意所创建的所有线程不能超一个设定
的最大值.建议最大值不要超25.
2.动态自适应调整集合中线程数.当有太多的线程处于闲置状态时(队列中没有任务),应该按一定比例
销毁闲置了一定时的线程.如果队列中任务队列积压太多而工作线程总数没有超最大线程数时应该及时
创建工作线程直至达到是大值.
3.需要一个专门的后台线程定时扫描队列中任务与正在工作的线程总数,闲置的线程总数.
?
以上功能有不同优化方法实现,可以参考JDK的线程池实现.?
?