1. 程式人生 > >Executors和ThreadPoolExecutor學習整理

Executors和ThreadPoolExecutor學習整理

public class ScheduledThreadPoolExecutor
        extends ThreadPoolExecutor
        implements ScheduledExecutorService {

Executors: 加了s ,相當於Arrays,Collections 等,

ThreadPoolExecutor : 一個 ExecutorService,它使用可能的幾個池執行緒之一執行每個提交的任務,通常使用 Executors 工廠方法配置。

ScheduledExecutorService: 介面,一個 ExecutorService,可安排在給定的延遲後執行或定期執行的命令。

ScheduledThreadPoolExecutor : 實現了 ScheduledExecutorService: , 因為它作為一個使用 corePoolSize 執行緒和一個無界佇列的固定大小的池,所以調整 maximumPoolSize 沒有什麼效果。

– 阿里:
執行緒池不允許 Executors 這個去建立,通過這個 ThreadPoolExecutor 去建立,這樣的處理方式讓使用的同學明確執行緒池的執行規則,避免資源耗盡!

說明:
Executors中各個方法的弊端:
1)
- newFixedThreadPool 建立一個可重用固定執行緒數的執行緒池,以共享的無界佇列方式來執行這些執行緒。
- newSingleThreadExecutor 建立一個使用單個 worker 執行緒的 Executor,以無界佇列方式來執行該執行緒。
問題:主要是堆積的請求處理佇列可能會耗費非常大的記憶體,導致OOM!

2)
- newCachedThreadPool 建立一個可根據需要建立新執行緒的執行緒池,但是在以前構造的執行緒可用時將重用它們。
- newSingleThreadScheduledExecutor 建立一個單執行緒執行程式,它可安排在給定延遲後執行命令或者定期地執行。
問題:主要問題是執行緒數的最大值是 Integer.MAX_VALUE(2^31 - 1) ,可能會建立非常多的執行緒導致OOM!