- 线程池管理器(ThreadPoolManager):用于创建并管理线程池
- 工作线程(WorkThread): 线程池中线程
- 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
- 任务队列:用于存放没有处理的任务。提供一种缓冲机制。
- 线程池管理器至少有下列功能:创建线程池,销毁线程池,添加新任务创建线程池的部分代码如下:
- 一共包含三个类:
- ThreadPool,管理线程池,实现采用单例模式。当来一个新的请求时,就把请求放入任务队列,如果有空闲线程,就唤醒等待在任务队列上的空闲线程,否则看工作线程是否超过限制,如果否,则新建一个线程,否则什么也不做。
- WorkThread,干活的线程。run()有个while(true)循环,不断的取任务然后执行任务。
- Request,代表一个任务所有的输入。
- /* #ThreadPool.java */
- package threadpool;
- import java.util.LinkedList;
- public class ThreadPool
- {
- public static ThreadPool getInstance()
- {
- if(pool==null) pool=new ThreadPool();
- return pool;
- }
- public void addTask(Request request)
- {
- synchronized(taskList)
- {
- taskList.addLast(request);
- if(freeNum==0)
- {
- if(workingNum<maxNum)
- {
- freeNum++;
- (new WorkThread()).start();
- }
- }
- taskList.notifyAll();
- }
- }
- private ThreadPool()
- {
- }
- private static ThreadPool pool;
- private int maxNum=500;
- int freeNum=0;
- int workingNum=0;
- LinkedList<Request> taskList = new LinkedList<Request>();
- }
- /* # WorkThread.java */
- package threadpool;
- public class WorkThread extends Thread
- {
- private static ThreadPool pool = ThreadPool.getInstance();
- private Request r;
- public void run()
- {
- while(true)
- {
- try
- {
- while(true)
- {
- synchronized(pool.taskList)
- {
- // got a task
- if(pool.taskList.size()>0)
- {
- pool.freeNum--;
- pool.workingNum++;
- r = pool.taskList.removeFirst();
- pool.taskList.notifyAll();
- break;
- }
- // wait for task
- else pool.taskList.wait();
- }
- }
- }
- catch (InterruptedException e)
- {
- e.printStackTrace();
- break;
- }
- // finish the task
- synchronized(pool.taskList)
- {
- pool.freeNum++;
- pool.workingNum--;
- }
- }
- }
- }
- /* # Request.java */
- package threadpool;
- public class Request
- {
- }
java实现的线程池
最新推荐文章于 2024-07-13 22:56:10 发布