使用ExecutorService實現線程池
阿新 • • 發佈:2017-06-02
控制 固定 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實現線程池