线程管理类

Posted krislight1105

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程管理类相关的知识,希望对你有一定的参考价值。

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();
        
    

 

以上是关于线程管理类的主要内容,如果未能解决你的问题,请参考以下文章

线程池管理工具类

从单例管理器类发布到 UI 线程

线程管理类

线程池的管理类MyThreadPoolManager

阶段3 2.Spring_07.银行转账案例_4 编写事务管理工具类并分析连接和线程解绑

阶段3 2.Spring_07.银行转账案例_4 编写事务管理工具类并分析连接和线程解绑