線程池的做用:javascript
線程池做用就是限制系統中執行線程的數量。
根據系統的環境狀況,能夠自動或手動設置線程數量,達到運行的最佳效果;少了浪費了系統資源,多了形成系統擁擠效率不高。用線程池控制線程數量,其餘線程排隊等候。一個任務執行完畢,再從隊列的中取最前面的任務開始執行。若隊列中沒有等待進程,線程池的這一資源處於等待。當一個新任務須要運行時,若是線程池中有等待的工做線程,就能夠開始運行了;不然進入等待隊列。java
爲何要用線程池:web
- 減小了建立和銷燬線程的次數,每一個工做線程均可以被重複利用,可執行多個任務
- 能夠根據系統的承受能力,調整線程池中工做線線程的數目,防止由於由於消耗過多的內存,而把服務器累趴下(每一個線程須要大約1MB內存,線程開的越多,消耗的內存也就越大,最後死機)
線程池類服務器
2.測試類app
- package com.tdt.test;
-
- import com.tdt.impl.ls.ThreadPool;
-
- public class ThreadPoolTest {
-
- public static void main(String[] args) throws InterruptedException {
- ThreadPool threadPool = new ThreadPool(3);
- Thread.sleep(500);
-
- for (int i = 0; i <=5 ; i++) {
- threadPool.execute(createTask(i));
- }
- threadPool.waitFinish();
- threadPool.closePool();
-
- }
-
- private static Runnable createTask(final int taskID) {
- return new Runnable() {
- public void run() {
-
- System.out.println("Hello world");
-
- }
- };
- }
- }
結果:測試
- 工做線程0等待任務...
- 工做線程1等待任務...
- 工做線程2等待任務...
-
- 工做線程0開始執行任務...
- Hello world
- 工做線程0等待任務...
-
- 工做線程1開始執行任務...
- Hello world
- 工做線程1等待任務...
-
- 工做線程2開始執行任務...
- Hello world
- 工做線程2等待任務...
-
- 工做線程0開始執行任務...
- Hello world
- 工做線程0等待任務...
-
- 工做線程1開始執行任務...
- Hello world
- 工做線程1等待任務...
-
- 工做線程2開始執行任務...
- Hello world
- 工做線程2等待任務...
此上適用於jdk1.4版本。轉自 http://sunnylocus.iteye.com/blog/223327#commentsthis