001package run.iget.framework.common.util; 002 003import java.util.concurrent.Callable; 004import java.util.concurrent.Future; 005import java.util.concurrent.LinkedBlockingDeque; 006import java.util.concurrent.RejectedExecutionException; 007import java.util.concurrent.ThreadPoolExecutor; 008import java.util.concurrent.TimeUnit; 009 010import com.google.common.util.concurrent.ThreadFactoryBuilder; 011 012public class ThreadTaskUtils { 013 014 private static final int MAX_QUEUE_CAPACITY_TEN_THOUSAND = 100000; 015 private static final int CORE_POOL_SIZE = 4; 016 private static final int MAX_POOL_SIZE = 32; 017 018 /** 019 * 线程池 020 */ 021 private static volatile ThreadPoolExecutor EXECUTE_POOL = new ThreadPoolExecutor(CORE_POOL_SIZE, 022 MAX_POOL_SIZE, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingDeque<>(MAX_QUEUE_CAPACITY_TEN_THOUSAND), 023 new ThreadFactoryBuilder().setNameFormat("ThreadTaskUtils-pool-%d").build()); 024 025 /** 026 * 提交任务到线程池中 027 * 028 * @param runnable 029 * @throws RejectedExecutionException 030 */ 031 public static Future<?> submitTask(Runnable runnable) throws RejectedExecutionException { 032 return EXECUTE_POOL.submit(runnable); 033 } 034 035 /** 036 * 提交任务到线程池中 037 * 038 * @param callable 039 * @throws RejectedExecutionException 040 */ 041 public static <T> Future<T> submitTask(Callable<T> callable) throws RejectedExecutionException { 042 return EXECUTE_POOL.submit(callable); 043 } 044}