java程序實現線程連接池功能

線程池: 
import   java.util.linkedlist;     
      
  public   abstract   class   manager   {     
      
          private   string   mthreadpoolname   =   null;     
      
          private   int   mthreadpoolmaxsize   =   1;     
      
          private   linkedlist   workers   =   new   linkedlist();     
      
          public   manager()   {     
          }     
      
          public   manager(string   name,   int   poolmaxsize)   {     
                  mthreadpoolname   =   name;     
                  createworker(name,   poolmaxsize);     
                  mthreadpoolmaxsize   =   poolmaxsize;     
          }     
      
          private   void   createworker(int   poolmaxsize)   {     
                          for   (int   i   =   0;   i   <   poolmaxsize;   i++)   {     
                                  worker   worker   =   new   ...worker(this);     
                                  workers.addlast(worker);     
                          }     
          }     
      
          public   synchronized   worker   getidleworker()   {     
                  return   (worker)workers.removefirst();     
          }     
      
          public   synchronized   void   notifyfree(worker   worker)   {     
                  if   (workers.size()   <   mthreadpoolmaxsize)   {     
                          workers.addlast(worker);     
                  }   else   {     
                          worker   =   null;     
                  }     
          }     
      
          public   int   getthreadpoolmaxsize()   {     
                  return   mthreadpoolmaxsize;     
          }     
      
          public   void   setthreadpoolmaxsize(int   threadpoolmaxsize)   {     
                  this.mthreadpoolmaxsize   =   threadpoolmaxsize;     
          }     
      
  }   

  線程抽象類  :


public   abstract   class   worker   implements   runnable   {     
      
          private   manager   mmanager   =   null;     
      
          private   thread   mthread   =   null;     
          
          public   worker()   {     
          }     
      
          public   worker(string   threadname,   manager   manager)   {     
                  mmanager   =   manager;     
                  mthread   =   new   thread(this,   threadname);     
                  init();     
                  mthread.start();     
          }     
      
          public   abstract   void   init();     
      
          public   void   run()   {     
                  while   (true)   {     
                          waitforstart();     
                          worker   worker   =   mmanager.getidleworker();     
                          process();     
                          isrunning   =   false;     
                          mmanager.notifyfree(worker);     
                  }     
          }     
      
          public   abstract   void   process();     
      
          public   void   start()   {     
                  isrunning   =   true;     
                  mmanager.getidleworker();     
                  notifytostart();     
          }     
      
          public   synchronized   void   waitforstart()   {     
                  try   {     
                          wait();     
                  }   catch   (interruptedexception   ex)   {     
                  }     
          }     
      
          public   synchronized   void   notifytostart()   {     
                  notify();     
          }     
      
  }     



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章