ThreadPoolUtil.java 1.79 KB
package com.xiniunet.service.railway.util.thread;

import org.apache.poi.ss.formula.functions.T;

import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author
 */
public class ThreadPoolUtil {

    private static final ExecutorService EXECUTOR;
    private static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors() + 1;

    static {
        EXECUTOR = new ThreadPoolExecutor(
                CORE_POOL_SIZE,
                CORE_POOL_SIZE,
                60L,
                TimeUnit.SECONDS,
                new LinkedBlockingQueue<Runnable>(1_0000),
                new XtThreadFactory()
        );
    }

    public static Future<?> submit(Runnable task) {
        return EXECUTOR.submit(task);
    }


    private static class XtThreadFactory implements ThreadFactory {
        private static final AtomicInteger ATOMIC_INTEGER = new AtomicInteger(1);
        private final ThreadGroup group;
        private final AtomicInteger threadNumber = new AtomicInteger(1);
        private final String namePrefix;

        XtThreadFactory() {
            SecurityManager s = System.getSecurityManager();
            group = (s != null) ? s.getThreadGroup() :
                    Thread.currentThread().getThreadGroup();
            namePrefix = "pool-" +
                    ATOMIC_INTEGER.getAndIncrement() +
                    "-thread-";
        }

        public Thread newThread(Runnable r) {
            Thread t = new Thread(group, r,
                    namePrefix + threadNumber.getAndIncrement(),
                    0);
            if (t.isDaemon()) {
                t.setDaemon(false);
            }
            if (t.getPriority() != Thread.NORM_PRIORITY) {
                t.setPriority(Thread.NORM_PRIORITY);
            }
            return t;
        }
    }

}