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}