Java 裏面線程池的頂級接口是 Executor,但是嚴格意義上講 Executor 並不是一個線程池,而只是一個執行線程工具。
真正的線程池接口是 ExecutorService。
1.newCachedThreadPool
創建一個可根據需要創建新線程的線程池,但是在以前構造的線程可用時將重用它們。
對於執行很多短期異步任務的程序而言,這些線程池通常可提高程序性能。
調用 execute 將重用以前構造的線程(如果線程可用)。如果現有線程沒有可用的,則創建一個新線程並添加到池中。終止並從緩存中移除那些已有 60 秒未被使用的線程。
因此,長時間保持空閒的線程池不會使用任何資源。
2.newFixedThreadPool
創建一個可重用固定線程數的線程池,以共享的無界隊列方式來運行這些線程。
話外音:什麼是無界隊列?
有界隊列:就是有固定大小的隊列。比如設定了固定大小的 LinkedBlockingQueue,又或者大小爲 0,只是在生產者和消費者中做中轉用的 SynchronousQueue。
無界隊列:指的是沒有設置固定大小的隊列。這些隊列的特點是可以直接入列,直到溢出。當然現實幾乎不會有到這麼大的容量(超過 Integer.MAX_VALUE),所以從使用