java实现的线程池

  1. 线程池管理器(ThreadPoolManager):用于创建并管理线程池 
  2. 工作线程(WorkThread): 线程池中线程 
  3. 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。 
  4. 任务队列:用于存放没有处理的任务。提供一种缓冲机制。 
  5. 线程池管理器至少有下列功能:创建线程池,销毁线程池,添加新任务创建线程池的部分代码如下:
  6. 一共包含三个类:
  7. ThreadPool,管理线程池,实现采用单例模式。当来一个新的请求时,就把请求放入任务队列,如果有空闲线程,就唤醒等待在任务队列上的空闲线程,否则看工作线程是否超过限制,如果否,则新建一个线程,否则什么也不做。
  8. WorkThread,干活的线程。run()有个while(true)循环,不断的取任务然后执行任务。
  9. Request,代表一个任务所有的输入。
  10. /* #ThreadPool.java */
  11. package threadpool;
  12. import java.util.LinkedList;
  13. public class ThreadPool
  14. {
  15.  public static ThreadPool getInstance()
  16.  {
  17.   if(pool==null) pool=new ThreadPool();
  18.   return pool;  
  19.  }
  20.  public void addTask(Request request)
  21.  {
  22.   synchronized(taskList)
  23.   {
  24.    taskList.addLast(request);
  25.    if(freeNum==0)
  26.    {
  27.     if(workingNum<maxNum)
  28.     {
  29.      freeNum++;
  30.      (new WorkThread()).start();
  31.     }
  32.    }
  33.    taskList.notifyAll();
  34.   }
  35.  }
  36.  private ThreadPool()
  37.  {
  38.   
  39.  }
  40.  private static ThreadPool pool;
  41.  private int maxNum=500;
  42.  int freeNum=0;
  43.  int workingNum=0;
  44.  LinkedList<Request> taskList = new LinkedList<Request>();
  45. }
  46. /* # WorkThread.java */
  47. package threadpool;
  48. public class WorkThread extends Thread
  49. {
  50.  private static ThreadPool pool = ThreadPool.getInstance();
  51.  private Request r;
  52.  public void run()
  53.  {
  54.   while(true)
  55.   {
  56.    try
  57.    {
  58.     while(true)
  59.     {
  60.      synchronized(pool.taskList)
  61.      {
  62.       // got a task
  63.       if(pool.taskList.size()>0)
  64.       {
  65.        pool.freeNum--;
  66.        pool.workingNum++;
  67.        r = pool.taskList.removeFirst();
  68.        pool.taskList.notifyAll();
  69.        break;
  70.       }
  71.       // wait for task
  72.       else pool.taskList.wait();
  73.      }
  74.     }
  75.    }
  76.    catch (InterruptedException e)
  77.    {
  78.     e.printStackTrace();
  79.     break;
  80.    }
  81.    
  82.    // finish the task
  83.    
  84.    synchronized(pool.taskList)
  85.    {
  86.     pool.freeNum++;
  87.     pool.workingNum--;
  88.    }
  89.   }
  90.  }
  91. }
  92. /* # Request.java */
  93. package threadpool;
  94. public class Request
  95. {
  96. }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值