概述
一、前言
当我们使用阿里的插件进行代码规范检查的时候,线程的创建不规范总是会报一下的提示:
所以,这篇博文就记录下线程池的创建。
二、线程池工厂类
/** * 线程池工厂类 * @author Freak * @date 2019/8/13. */ public class ThreadPoolProxyFactory { static ThreadPoolProxy mNormalThreadPoolProxy; static ThreadPoolProxy mDownLoadThreadPoolProxy; /** * 得到普通线程池代理对象mNormalThreadPoolProxy */ public static ThreadPoolProxy getNormalThreadPoolProxy() { if (mNormalThreadPoolProxy == null) { synchronized (ThreadPoolProxyFactory.class) { if (mNormalThreadPoolProxy == null) { mNormalThreadPoolProxy = new ThreadPoolProxy(5, 5); } } } return mNormalThreadPoolProxy; } /** * 得到下载线程池代理对象mDownLoadThreadPoolProxy */ public static ThreadPoolProxy getDownLoadThreadPoolProxy() { if (mDownLoadThreadPoolProxy == null) { synchronized (ThreadPoolProxyFactory.class) { if (mDownLoadThreadPoolProxy == null) { mDownLoadThreadPoolProxy = new ThreadPoolProxy(3, 3); } } } return mDownLoadThreadPoolProxy; } }
三、线程池代理类
/** * 线程池代理 * * @author Freak * @date 2019/8/13. */ public class ThreadPoolProxy { ThreadPoolExecutor mExecutor; private int mCorePoolSize; private int mMaximumPoolSize; /** * @param corePoolSize 核心池的大小 * @param maximumPoolSize 最大线程数 */ public ThreadPoolProxy(int corePoolSize, int maximumPoolSize) { mCorePoolSize = corePoolSize; mMaximumPoolSize = maximumPoolSize; } /** * 初始化ThreadPoolExecutor * 双重检查加锁,只有在第一次实例化的时候才启用同步机制,提高了性能 */ private void initThreadPoolExecutor() { if (mExecutor == null || mExecutor.isShutdown() || mExecutor.isTerminated()) { synchronized (ThreadPoolProxy.class) { if (mExecutor == null || mExecutor.isShutdown() || mExecutor.isTerminated()) { long keepAliveTime = 3000; TimeUnit unit = TimeUnit.MILLISECONDS; BlockingQueue workQueue = new LinkedBlockingDeque<>(); ThreadFactory threadFactory = Executors.defaultThreadFactory(); RejectedExecutionHandler handler = new ThreadPoolExecutor.DiscardPolicy(); mExecutor = new ThreadPoolExecutor(mCorePoolSize, mMaximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); } } } } /** 执行任务和提交任务的区别? 1.有无返回值 execute->没有返回值 submit-->有返回值 2.Future的具体作用? 1.有方法可以接收一个任务执行完成之后的结果,其实就是get方法,get方法是一个阻塞方法 2.get方法的签名抛出了异常===>可以处理任务执行过程中可能遇到的异常 */ /** * 执行任务 */ public void execute(Runnable task) { initThreadPoolExecutor(); mExecutor.execute(task); } /** * 提交任务 */ public Future submit(Runnable task) { initThreadPoolExecutor(); return mExecutor.submit(task); } /** * 移除任务 */ public void remove(Runnable task) { initThreadPoolExecutor(); mExecutor.remove(task); } }
最后
以上就是活力胡萝卜为你收集整理的使用线程池工厂创建线程一、前言二、线程池工厂类三、线程池代理类的全部内容,希望文章能够帮你解决使用线程池工厂创建线程一、前言二、线程池工厂类三、线程池代理类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复