ThreadPoolExecutor線程池參數設置技巧

private static final ExecutorService ANDROID_CHANNEL_THREAD_POOL =
            new ThreadPoolExecutor(50/*corePoolSize:核心線程數*/, 100/*maxPoolSize:最大線程數*/, 2000/*keepAliveTime:線程空閒時間*/, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1000/*任務隊列大小*/));

corePoolSize、maxPoolSize 的設置要和系統的CPU核數相關.java

核心線程的數量,線程池初始化後,每接到一個任務就會建立一個線程來執行任務,直到當前的線程數目到達corePoolSize,此時新的任務將會進入queue中,只有當queue滿了以後,maximunPoolSize才發揮做用線程

線程池的queue滿了以後,若是還有新的任務到來,此時若是線程數目小於maximumPoolSize,則會新建線程來執行任務。code

拒絕策略:當線程數=maximumPoolSize 且 queue已滿 這時候新提交的任務會被拒絕隊列

1.AbortPolicy:直接拋出異常,默認策略; 
2.CallerRunsPolicy:用調用者所在的線程來執行任務; 
3.DiscardOldestPolicy:丟棄阻塞隊列中靠最前的任務,並執行當前任務; 
4.DiscardPolicy:直接丟棄任務;
相關文章
相關標籤/搜索