熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java學習:線程池的簡單構建

2013-11-23 19:57:54  來源: Java高級技術 

  現在服務器端的應用程序幾乎都采用了線程池技術這主要是為了提高系統效率因為如果服務器對應每一個請求就創建一個線程的話在很短的一段時間內就會產生很多創建和銷毀線程動作導致服務器在創建和銷毀線程上花費的時間和消耗的系統資源要比花在處理實際的用戶請求的時間和資源更多線程池就是為了盡量減少這種情況的發生
 
  下面我們來看看怎麼用Java實現一個線程池一個比較簡單的線程池至少應包含線程池管理器工作線程任務隊列任務接口等部分其中線程池管理器(ThreadPool Manager)的作用是創建銷毀並管理線程池將工作線程放入線程池中工作線程是一個可以循環執行任務的線程在沒有任務時進行等待任務隊列的作用是提供一種緩沖機制將沒有處理的任務放在任務隊列中任務接口是每個任務必須實現的接口主要用來規定任務的入口任務執行完後的收尾工作任務的執行狀態等工作線程通過該接口調度任務的執行
 
  一種就是以固定線程數目作為基准讓每一個線程的工作線程都處於無限循環中利用Java中基類的nodify()與wait()進行協同工作

  基本思想如下

  在構建線程池的時候創建所有工作線程並且讓所有工作線程開始運行
 
  public ThreadPool(int nPoolSize)
  {
   if(nPoolSize<=)
   {
    nPoolSize=DEFAULT_POOL_SIZE;
   }
   m_ThreadList=new ArrayList();
   m_RunList=new LinkedList();
   for(int i=;i<nPoolSize;i++)
   {
    WorkerThread temp=new WorkerThread(i+);
    m_ThreadListadd(temp);
    tempstart();
   }
  }

  在工作線程的run()方法中用wait()進行等待當線程處於wait()狀態基本不占用CPU這樣所有工作線程都處於掛起狀態等待任務來喚醒

  實現如下

  while (true)
  {
   synchronized (m_RunList)
   {
    while (m_RunListisEmpty())
    {
     //任務列表為空則進行等待否則運行任務並在本任務列表裡面剔除任務
     try
     {
      m_RunListwait();
     }
     catch (InterruptedException e) {}
    }
              r = (Runnable) m_RunListremoveFirst();
              file://Systemoutprintln(m_nThreadID + :Start);
              if (r == null)return;
   }
   try
   {
            rrun();
           }
           catch (Exception e) {}
  }

  以上代碼就是一個工作線程主要代碼這個線程永遠不會停止只可能被掛起或者運行任務


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27738.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.