线程管理类

package com.liuwei.comment;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadManager {

    private static ThreadManager threadManager;
    private ThreadPoolExecutor threadPoolExecutor;

    public ThreadManager(int maxThreadCount) {
        threadPoolExecutor = new ThreadPoolExecutor(1, maxThreadCount, 200L,
                TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
    }

    public synchronized static ThreadPoolExecutor getThreadManager(int maxThreadCount) {
        if (threadManager == null) {
            synchronized (ThreadManager.class) {
                if (threadManager == null) {
                    threadManager = new ThreadManager(maxThreadCount);
                }
            }
        }
        return threadManager.threadPoolExecutor;
    }
    
    public synchronized static ThreadManager getThreadManager() {
        return threadManager;
    }
    // 执行任务,当线程池处于关闭,将会重新创建的线程池
    public synchronized void execute(Runnable runn) {
        if (runn == null) {
            return;
        }
        if (threadPoolExecutor == null || threadPoolExecutor.isShutdown()) {
            threadPoolExecutor = getThreadManager(1);
        }
        threadPoolExecutor.submit(runn);
    }

    // 执行任务,当线程池处于关闭,将会重新创建的线程池
    public synchronized <T> Future<T> execute(Callable<T> callable) {
        if (callable == null) {
            return null;
        }
        if (threadPoolExecutor == null || threadPoolExecutor.isShutdown()) {
            threadPoolExecutor = getThreadManager(1);
        }
        Future<T> future = threadPoolExecutor.submit(callable);

        return future;
    }

    /** 取消线程池中某个还未执行的任务 */
    public synchronized void cancel(Runnable runn) {
        if (threadPoolExecutor != null && !threadPoolExecutor.isShutdown()
                || threadPoolExecutor.isTerminating()) {
            threadPoolExecutor.getQueue().remove(runn);
        }
    }

    /** 取消线程池中某个还未执行的任务 */
    public synchronized void cancel(Callable<?> callable) {
        if (threadPoolExecutor != null && !threadPoolExecutor.isShutdown()
                || threadPoolExecutor.isTerminating()) {
            threadPoolExecutor.getQueue().remove(callable);
        }
    }

    /** 取消线程池中某个还未执行的任务 */
    public synchronized boolean contains(Callable<?> callable) {
        if (threadPoolExecutor != null
                && (!threadPoolExecutor.isShutdown() || threadPoolExecutor.isTerminating())) {
            return threadPoolExecutor.getQueue().contains(callable);
        } else {
            return false;
        }
    }

    /** 取消线程池中某个还未执行的任务 */
    public synchronized boolean contains(Runnable runn) {
        if (threadPoolExecutor != null
                && !threadPoolExecutor.isShutdown() || threadPoolExecutor.isTerminating()) {
            return threadPoolExecutor.getQueue().contains(runn);
        } else {
            return false;
        }
    }

    /** 立刻关闭线程池,并且正在执行的任务也将会被中断 */
    public void stop() {
        if (threadPoolExecutor != null
                && !threadPoolExecutor.isShutdown() || threadPoolExecutor.isTerminating()) {
             threadPoolExecutor.shutdown();
        }
    }

    /** 平缓关闭单任务线程池,但是会确保所有已经加入的任务都将会被执行完毕才关闭 */
    public synchronized void shutdown() {
        if (threadPoolExecutor != null
                && !threadPoolExecutor.isShutdown() || threadPoolExecutor.isTerminating()) {
            threadPoolExecutor.shutdownNow();
        }
    }
}

 

posted @ 2019-08-31 09:38  Leo的银弹  阅读(358)  评论(0编辑  收藏  举报