使我短命的Java線程池

老大讓我把一個單線程的日播放量統計任務變成一個多線程的任務,時間由 2小時 優化到 30 分鐘以內,然後有了我與線程池死去活來的日子。

學習自:Java 併發編程 78 講

1 線程池的由來

在 Java 誕生之初是沒有線程池的概念的,而是先有線程,隨着線程數的不斷增加,人們發現需要一個專門的類來管理它們,於是才誕生了線程池。沒有線程池的時候,每發佈一個任務就需要創建一個新的線程,這樣在任務少時是沒有問題的

/** 
* 描述:單個任務的時候,新建線程來執行 
*/ 
public class OneTask { 
 
    public static void main(String[] args) { 
        Thread thread0 = new Thread(new Task());
        thread0.start();
    } 
 
    static class Task implements Runnable { 
 
        public void run() { 
           System.out.println("Thread Name: " + Thread.currentThread().getName());
        } 
    } 
}

執行結果:

Thread Name: Thread-0

如圖,主線程調用 start() 方法,啓動了一個 t0 的子線程。這是在一個任務的場景下,隨着我們的任務增多,比如現在有 10 個任務了,那麼我們就可以使用 for 循環新建 10 個子線程

/** 
* 描述:for循環新建10個線程 
*/ 
public class TenTask { 
 
    public static void main(String[] args) { 
        for (int i = 0; i < 10; i++) { 
            Thread thread = new Thread(new Task());
            thread.start();
        } 
    } 
 
    static class Task implements Runnable { 
 
        public void run() { 
            System.out.println("Thread Name: " + Thread.currentThread().getName());
        } 
    } 
}

執行結果:

 

 

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