此執行緒池一直增長,直到上限,增長後不收縮(因為池子裡面的執行緒是永生的)。這個keepAliveTime引數設定的為Long.MAX_VALUE,所以池子裡面的執行緒幾乎不會因為idle而被terminate,也就是說只要執行緒被建立並放到池子裡面永遠不會被銷燬,永生。
/** * 此執行緒池一直增長,直到上限,增長後不收縮。 * */ public class LimitedThreadPool implements ThreadPool { public static final int DEFAULT_CORE_THREADS = 0; public static final int DEFAULT_THREADS = 200; public static final int DEFAULT_QUEUES = 0; public Executor getExecutor(URL url) { String name = url.getParameter(Constants.THREAD_NAME_KEY, Constants.DEFAULT_THREAD_NAME); int cores = url.getParameter(Constants.CORE_THREADS_KEY, Constants.DEFAULT_CORE_THREADS); int threads = url.getParameter(Constants.THREADS_KEY, Constants.DEFAULT_THREADS); int queues = url.getParameter(Constants.QUEUES_KEY, Constants.DEFAULT_QUEUES); return new ThreadPoolExecutor(cores, threads, Long.MAX_VALUE, TimeUnit.MILLISECONDS, queues == 0 ? new SynchronousQueue<Runnable>() : (queues < 0 ? new LinkedBlockingQueue<Runnable>() : new LinkedBlockingQueue<Runnable>(queues)), new NamedThreadFactory(name, true), new AbortPolicyWithReport(name, url)); } }
public interface ThreadPool { /** * 執行緒池 * * @param url 執行緒引數 * @return 執行緒池 */ @Adaptive({Constants.THREADPOOL_KEY}) Executor getExecutor(URL url); }