线程池的封装和使用(代理模式工厂模式)

设计模式、原则、饿汉式单例模式、抽象工厂、代理模式、观察者模式、模板方法模式使用场景 设计模式、设计原则、饿汉式单例模式、简单工厂、抽象工厂、代理模式、观察者模式、模板方法模式使用场景、面试题 阅读详情

通过线程池代理类和线程池工厂完成对线程池操作的解耦。
简单的代理模式和简单的工厂模式

1.创建一个代理类

public class ThreadPoolProxy {
    ThreadPoolExecutor  mExecutor;          // 只需创建一次
    int                 mCorePoolSize;
    int                 mMaximumPoolSize;
    long                mKeepAliveTime;

    public ThreadPoolProxy(int corePoolSize, int maximumPoolSize, long keepAliveTime) {
        super();
        mCorePoolSize = corePoolSize;
        mMaximumPoolSize = maximumPoolSize;
        mKeepAliveTime = keepAliveTime;
    }

    private ThreadPoolExecutor initThreadPoolExecutor() {//双重检查加锁
        if (mExecutor == null) {
            synchronized (ThreadPoolProxy.class) {
                if (mExecutor == null) {
                    TimeUnit unit = TimeUnit.MILLISECONDS;
                    BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();// 无界队列
                    ThreadFactory threadFactory = Executors.defaultThreadFactory();
                    RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();// 丢弃任务并抛出RejectedExecutionException异常。
                    mExecutor = new ThreadPoolExecutor(//
                            mCorePoolSize,// 核心的线程数
                            mMaximumPoolSize,// 最大的线程数
                            mKeepAliveTime, // 保持时间
                            unit, // 保持时间对应的单位
                            workQueue,// 缓存队列/阻塞队列
                            threadFactory, // 线程工厂
                            handler// 异常捕获器
                    );
                }
            }
        }
        return mExecutor;
    }

    /**执行任务*/
    public void execute(Runnable task) {
        initThreadPoolExecutor();
        mExecutor.execute(task);
    }

    /**提交任务*/
    public Future<?> submit(Runnable task) {
        initThreadPoolExecutor();
        return mExecutor.submit(task);
    }

    /**移除任务*/
    public void removeTask(Runnable task) {
        initThreadPoolExecutor();
        mExecutor.remove(task);
    }
}

代理类将线程池单例化。并提供了几个核心的操作方法。属于将线程池构建的放法进行抽取。
2.创建工厂类

public class ThreadPoolFactory {
    static ThreadPoolProxy  mNormalPool;
    static ThreadPoolProxy  mDownLoadPool;

    /**得到一个普通的线程池*/
    public static ThreadPoolProxy getNormalPool() {
        if (mNormalPool == null) {
            synchronized (ThreadPoolProxy.class) {
                if (mNormalPool == null) {
                    mNormalPool = new ThreadPoolProxy(5, 5, 3000);
                }
            }
        }
        return mNormalPool;
    }
    /**得到一个下载的线程池*/
    public static ThreadPoolProxy getDownLoadPool() {
        if (mDownLoadPool == null) {
            synchronized (ThreadPoolProxy.class) {
                if (mDownLoadPool == null) {
                    mDownLoadPool = new ThreadPoolProxy(3, 3, 3000);
                }
            }
        }
        return mDownLoadPool;
    }
}

3.使用

ThreadPoolFactory.getDownLoadPool().execute(task);

希望能对开源框架的封装有一些启发。

Java设计模式:分享在Java代码中使用的常见设计模式(比如工厂模式,观察者模式,装饰者模式等),以及何时适合使用它们 一、设计模式的概念与重要性 设计模式的定义 设计模式的分类 为什么使用设计模式 二、创建型模式 工厂模式 定义与使用场景 Java中如何实现 单例模式 定义与使用场景 Java中如何实现 原型模式 定义与使用场景 Java中如何实现 建造者模式 定义与使用场景 Java中如何实现 三、结构型模式 适配器模式 定义与使用场景 Java中如何实现 装饰者模式 定义与使用场景 Java中如何实现 代理模式 定义与使用场景 Java中如何实现 桥接模式 定义与使用场景 Java中如何实现 四、行为型模式 观察者模式 阅读详情

相关推荐

VS2022错误列表高效处理:从复制到Excel表格的完整指南

本文详细介绍了在Visual Studio 2022中高效处理错误列表的实用技巧,重点讲解了如何将错误信息一键复制并粘贴到Excel表格中。通过基础操作、自定义视图、筛选功能及常见问题解决方案,帮助开发者将杂乱的编译错误整理成清晰、可排序、可筛选的数据表,极大提升了团队协作、错误分析和项目管理的效率。

weixin_28837817的博客 358

多线程实现方法之一

一、创建线程池工厂 **  * 线程池工厂  */ public class ThreadPoolFactory {     public static ThreadPoolProxy threadPoolProxy;     public static final int Common_CORE_POOL_SIZE=5;     public static final int Co

smile_1101的博客 325

ISO26262 功能安全各个阶段测试要求

1. 开发过程说明 系统层面:包括软硬件集成测试、系统集成测试以及整车测试。 硬件层面:包括硬件集成与测试。 软件层面:单元测试、集成测试。 2. 功能安全总体要求 2.1 各项指标 2.2 诊断覆盖度举例 针对一个信号举例说明: 3. 功能安全测试要求 3.1 测试计划 核心内容应包括, 测试对象:需要测试的对象描述,以及测试的范围描...

AgingMoon的博客 1万+

线程池ThreadPoolFactory 工具

线程池的好处 android开发,大家最熟悉的肯定是主线程,也就是ui线程,也都知道在非ui线程更新界面会报错提示不允许在子线程更新ui。但是耗时操作还是需要使用子线程,例如: new Thread(new Runnable() {} @Override public void run() { // TODO Auto-generated method st...

qq_36500835的博客 3619

SAP FICO 金税系统-金税->SAP接口功能开发说明书(接口字段)

SAP FICO 金税系统-金税->SAP接口功能开发说明书(接口字段)

我好像病了的博客 1257

零基础入门simulink仿真--通信领域的调制解调技术:基于Simulink的PM信号调制与解调仿真建模示例

PM的基本原理是将基带信号(如语音或音乐信号)加载到高频载波信号的相位上。通过改变载波的瞬时相位,可以实现信息的传输。PM的优点包括抗噪声能力强、频谱利用率较高等,但其解调过程相对复杂。通过Simulink,我们可以通过模块化的建模方式实现PM信号的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的PM信号调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解PM信号调制与解调的基本原理及其应用。所需工具和环境:列出进行PM仿真所需的工具和环境。

amy_mhd的博客 604

Java线程池(ThreadPoolFactory)构造参数总结

今天看到关于线程池的一篇帖子,是关于面试时问到ThreadPoolFactory构造器时的一些问题,之前博主也学习过一些关于ThreadPoolFactory构造器的问题,但是一直没有总结过,既然今天有时间,那么就总结一下,避免有些同学走弯路(有些工作多年的老鸟也不一定能准确的说明coreSize,MaxSize,workQueueSize的关系),话不多说上干货。 下面来直接看ThreadPoo

Levin的技术工厂 6415

【nerfStudio】1-在windows上安装nerfStudio

安装Git。安装Visual Studio 2022。在安装CUDA之前必须完成此步骤。必须在“桌面开发与C++”工作流程(在BuildTools版本中称为“C++构建工具”)中包含所需的组件。Nerfstudio要求。我们建议使用conda来管理依赖关系。在继续之前,请确保安装了Conda。 依赖关系 PyTorch 请注意,如果安装了低于2.0.1的PyTorch版本,则应卸载先前版本的pytorch、functorch和tiny-cuda-nn。 基于CUDA 11.8的Torch 2.0.1 安装基

dlhlSC的博客 1692

线程池学习笔记(一)ThreadPoolExecutor

ThreadPoolExecutor源码解析

阿官 610

【AHE数据集】中国2019年多源热排放数据集-500m空间分辨率

【AHE数据集】中国2019年多源热排放数据集

WW、forever的博客 411

工具变量法入门:解决因果分析中的内生性问题

想知道如何在复杂的数据中精确揭示因果关系?你是否遇到过自变量与误差项相关导致的困惑?工具变量法将为你拨开迷雾,帮助你剖析数据背后的因果链条。这篇文章不仅详细讲解了工具变量法的原理,还结合实际案例,让你轻松掌握这一关键研究工具。点击阅读,开启你的因果分析新篇章!

theskylife的博客 1953

java线程池

这里有一篇文章 文章链接

dangyongping 251

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

线程池与工厂模式、代理模式的结合使用

为了提高代码的效率,我们经常会使用到线程池,那在实际项目工作中,如何将线程池与工厂模式和代理模式结合使用,使我们的代码更高效,更具有面象对象的思想,以及维护和拓展性更高呢? 接下来,我将结合下列代码讲讲我平时写项目时的写法,至于线程池是什么?工厂模式和代理模式的概念等,大家如何不知道的,可以在网上自己查下,这里就不做过多累赘的介绍。          首先,我们先来创建一个线程池代理类

GitHub_boy的博客 3878

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

设计模式(单例模式、工厂模式、建造者模式、代理模式)

六大原则 + 设计模式(单例模式、工厂模式、建造者模式、代理模式)

Elena's Blog 1749

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Java】设计模式——单例、工厂、代理模式

本文深入解析Java三大核心设计模式:单例模式确保全局唯一实例,推荐枚举实现;工厂模式封装对象创建,分简单工厂、工厂方法和抽象工厂;代理模式控制对象访问,含静态代理和动态代理。文章对比了各模式的实现方式、适用场景及优缺点,并提供了代码示例和UML图示。掌握这些模式可显著提升代码质量,在Spring等框架中广泛应用。文末附实践练习,帮助读者巩固学习效果。

m0_57545130的博客 241

C++ 设计模式(三)工厂方法模式、抽象工厂、代理模式和适配器模式

这里写目录标题工厂方法模式定义背景要点结构图抽象工厂定义背景结构图适配器模式定义背景要点本质结构图代理模式定义背景要点本质结构图 工厂方法模式 定义 定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method 使得一个类的实例化延迟到子类 背景 实现一个导出数据的接口,让客户选择数据的导出方式 要点 解决创建过程比较复杂,希望对外隐藏这些细节; 比如连接池,线程池; 隐藏对象真实类型; 对象创建会有很多参数来决定如何创建; 创建对象有复杂的依赖关系; 结构图 抽象工厂 定义 提供一个

asdaqqwc的博客 330

常见设计模式 单例,工厂,代理,策略,适配器

1确保一个类只有一个实例2构造方法必须是private3 提供一个静态方法获取唯一实例实例在类加载时就创建实例在第一次调用时创建默认实现,使用双重检查锁定。需要加volatile防止指令重排序因为不是原子操作分为三步:分配内存初始化对象将对象引用赋给Spring 容器中的 Bean 默认是单例。

weixin_65790121的博客 1384

【Python高阶技巧】设计模式(单例模式、工厂模式)

什么是设计模式设计模式就是一种编程套路。使用特定的套路得到特定的效果什么是单例设计模式单例模式就是对一个类,只获取其唯一的类实例对象,持续复用它。节省内存节省创建对象的开销什么是工厂模式将对象的创建由使用原生类本身创建,转换到由特定的工厂方法来创建用工厂模式好处大批量创建对象的时候有统一的入口,易于代码维护当发生修改,仅修改工厂类的创建方法即可符合现实世界的模式,即由工厂来制作产品(对象)

咖喱年糕的博客 1639

C++设计模式--工厂模式

1.设计模式1.设计模式C++设计模式共有以下几种:1. **创建型模式**:关注于对象的创建过程。包括工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。2. **结构型模式**:关注类和对象的组合。包括适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式和享元模式。3. **行为型模式**:关注对象之间的通信。包括策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。

weixin_41885845的博客 1191

前端常用几种设计模式

本篇将介绍以下几个比较常见的设计模式: 工厂模式 单例模式 代理模式 观察者模式 策略模式 模块模式 构造函数模式 混合模式 一、工厂模式 工厂模式是用来创建对象的一种最常用的设计模式,不暴露创建对象的具体逻辑,而是将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂,工厂模式根据抽象程度的不同可以分为:简单工厂,工厂方法和抽象工厂,接下来,将对简单工厂和工厂方法在JavaScript中的运用举个简单的例子: 1. 简单

qq_45845127的博客 3745

常用设计者模式---工厂模式和单例模式

从今天起(2017.2.14),我要开始系统认真的啃基础,坚持下去,每天进步一点点。 一、什么是设计者模式(what)? 最早提出“设计模式”概念的是建筑设计大师亚力山大Alexander。在他的《建筑的永恒之道》里这样描述:模式是一条由三个部分组成的通用规则:它表示了一个特定环境、一类问题和一个解决方案之间的关系。每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。 设计

静下心来吧,让自己变强大点! 3148

利用反射机制及配置文件使用工厂方法设计模式设计_领略设计模式——工厂模式...

工厂模式是实例化对象的一种模式。在一般的场景下,如果我们要使用一个对象,必须先实例化,再使用。在工厂模式下,我们无需通过调用构造方法来得到对象实例,而是通过工厂方法得到对象实例,可以说工厂模式下,调用构造方法的过程被封装了。1、工厂模式的优势只从表面来看,工厂模式的做法似乎多此一举,因为工厂方法中依然会通过构造方法等方式创建对象实例,不如直接创建实例来的方便。实际上,从设计角度来说,直接创建对象是...

weixin_39834788的博客 225

设计模式一(单例模式、工厂模式)

简介 23种设计模式 主要类别如下: 创建型: 创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。 工厂模式、单例模式、生成器模式、原型模式 结构型: 用于帮助将多个对象组织成更大的结构。 结构型模式主要有适配器模式adapter、桥接模式bridge、组合器模式component、装饰器模式decorator、门面模式、...

codegun7 219

Android 设计模式入门到精通之六:代理模式(Proxy Pattern)

设计模式项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&amp;Star,代码设计模式&amp;框架设计实现不妥之处,请帮忙指正),谢谢! 代理模式(Proxy Pattern) 1. 概念 Provide a surrogate or placeholder for another object to...

caobaokang的专栏 487

常见的几种设计模式(详细)——应用场景和实现方式

本文详细介绍了几种常见的设计模式,如单例模式、工厂模式、策略模式、观察者模式、代理模式、装饰器模式、责任链模式。同时介绍了其应用场景和实现方法。

QiuYanping_的博客 1493
上一篇: universal-image-loader框架的再次封装使用
下一篇: Activity启动过程分析
Nela
博客等级 码龄11年 9粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值