1. 程式人生 > >使用ExecutorService實現線程池

使用ExecutorService實現線程池

控制 固定 public style [] ati 關閉 run ren

ExecutorService是java提供的用於管理線程池的類。

線程池的作用:

  - 控制線程數量

  - 重用線程

  當一個程序中創建了許多線程,並在任務結束後銷毀,會給系統帶來過度消耗資源,以及過度切換線程的危險,從而可能導致系統崩潰。為此我們應使用線程池來解決這個問題。

線程池的概念:

  首先創建一些線程,它們的集合稱為線程池,當服務器受到一個客戶請求後,就從線程池中取出一個空閑的線程為之服務,服務完後不關閉該線程,而是將該線程還回到線程池中。

  在線程池編程模式下,任務是提交給整個線程池,而不是交給某個線程,線程池拿到任務就在內部找空閑的線程,再把任務交給內部的空閑線程,一個線程只能執行一個任務,但可以向線程池提交多個任務。

線程池的主要實現方法:

  - Executors.newCachedThreadPool()

  創建一個可根據需要創建新線程的線程池,但是在以前構造的線程可用時將重用它們

  - Executors.newFixedThreadPool(int nThreads)

  創建一個可重用固定線程集合的線程池,以共享的無界隊列方式來運行這些線程。

  下面以一段代碼演示線程池的使用: 

public static void main(String[] args) {
     ExecutorService threadpoo1 = Executors.newFixedThreadPool(2);
     
for(int i=0;i<5;i++){ Runnable runn=new Runnable() { public void run() { Thread t=Thread.currentThread(); try { System.out.println(t+":正在運行"); Thread.sleep(5000); System.out.println(t
+"運行結束");        } catch (Exception e) {       System.out.println("線程被中斷了");        }   } }; threadpoo1.execute(runn); System.out.println("指派了一個任務交給線程池"); threadpoo1.shutdown(); System.out.println("停止線程池了!"); }

使用ExecutorService實現線程池