線程池參數講解,及什麼時候會創建新線程執行新任務

public class Principle {

    public static void main(String[] args) {
        ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 4, 60L, TimeUnit.SECONDS, new ArrayBlockingQueue<>(3));
        for (int i = 1; i <= 6; i++) {
            TaskThred t1 = new TaskThred("任務" + i);
            executor.execute(t1);
        }
        executor.shutdown();
    }
}

class TaskThred implements Runnable {
    private String taskName;

    public TaskThred(String taskName) {
        this.taskName = taskName;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + taskName);
    }

}

結果

pool-1-thread-1任務1
pool-1-thread-2任務2
pool-1-thread-2任務3
pool-1-thread-2任務4
pool-1-thread-2任務5
pool-1-thread-3任務6

 現在是有創建三個線程在執行任務

如果把循環改成5次

結果

pool-1-thread-2任務2
pool-1-thread-2任務3
pool-1-thread-1任務1
pool-1-thread-2任務4
pool-1-thread-1任務5

 說個結論,在配置2個核心線程,4個最大線程,3個緩存隊列情況下

1.當要執行的任務 ≤ 核心線程+隊列緩存,就只會有2個工作線程在執行任務,2就是我配的核心線程數(工作線程)

2.當要執行的任務 > 核心線程+隊列緩存,多一個任務就多創建一個新的線程執行,總的線程小於最大線程數

3.當要執行的任務 > 最大線程數+隊列緩存,第8個任務直接報錯

核心線程就是在不大於隊列+核心線程數情況下會調用的工作線程,配3個那就會有3個工作線程在執行任務,

隊列+核心線程數<N個執行任務≤隊列+最大線程數,就會有N個工作線程在執行任務

 

 

 

 

 

 

 

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