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

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

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

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中如何实现 四、行为型模式 观察者模式 阅读详情

相关推荐

手写数字数据集MNIST

文章目录一、 简介二、下载MNIST数据集训练集和测试集的长度输出图像数据和标记数据的形状显示手写数字图片输出数据集中的第1个样本显示图片 一、 简介 MNIST是一个非常有名的手写体数字识别数据集(手写数字灰度图像数据集),在很多资料中,这个数据集都会被用作深度学习的入门样例。 MNIST数据集是由0到9的数字图像构成的。训练图像有6万张,测试图像有1万张。MNIST数据集是NIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据。由250个不同的人手写而成。 每一张图

qq_37289115的博客 1万+

多线程实现方法之一

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

smile_1101的博客 325

视频倍速 - 在线调倍速的加速器APP工具

一刀工具箱APP提供一键可将手机上的视频倍速播放,可以调整视频倍速的加速器,调节视频的速度也就是调节视频的播放速度!一键可将手机上的视频倍速播放,可以调整视频倍速的加速器,调节视频的速度也就是调节视频的播放速度!视频倍速-在线调倍速的加速器-一刀工具箱APP。...

无涯教程 7553

线程池ThreadPoolFactory 工具

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

qq_36500835的博客 3619

5分钟搞懂知识抽取:如何把非结构化数据变成知识图谱的宝藏?

本文通过一个电商评论分析实战案例,详细解析了如何利用spaCy、Neo4j等工具,将非结构化文本数据转化为结构化知识图谱的完整流程。文章重点阐述了知识抽取的核心步骤,包括命名实体识别、关系抽取以及知识存储与查询,帮助读者快速掌握将数据转化为知识宝藏的关键技术。

weixin_29054245的博客 234

PVE虚拟机运行不流畅,出现卡顿。

🏆本文收录于《优快云问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 3061

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

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

Levin的技术工厂 6415

lammps构建高熵合金模型+结构优化初步筛选能量最小的结构

lammps构建高熵合金模型+结构优化初步筛选能量最小的结构

qq_45834835的博客 2603

线程池学习笔记(一)ThreadPoolExecutor

ThreadPoolExecutor源码解析

阿官 609

想在 Visual Studio Code 里进行 ABAP 开发,需要安装的扩展列表

安装完毕后,我们可以将 SAP 系统配置为 Visual Studio Code 连接的远程文件系统。为了连接到 SAP 系统,需要启用 ABAP 开发工具 (ADT) ICF 节点,这与 SAP Hana Studio 等工具使用的服务相同。打开 SAP GUI 并连接到目标系统,运行事务 SICF,然后激活 ADT_SRV 服务,如下所示。这启用了允许代码编辑器和 IDE 连接到 SAP 系统的服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3116

反应动力学仿真软件:Kintecus_(11).数据输入与输出解析

在反应动力学仿真软件的二次开发中,数据输入与输出解析是至关重要的步骤。正确地解析输入数据和生成输出结果不仅能够确保仿真过程的顺利进行,还可以提高仿真的准确性和效率。本节将详细介绍如何在仿真软件中实现数据输入与输出的解析,包括文件格式、数据结构、解析方法以及实际操作示例。

kkchenjj的博客 757

java线程池

这里有一篇文章 文章链接

dangyongping 251

STM32入门教程:智能储物柜控制

在这个例子中,我们将使用一个4x4的储物柜,共有16个储物格。我们了解了硬件准备、储物柜电路设计、STM32的基本配置、储物柜控制代码的编写以及测试和调试等方面的知识。根据我们的电路设计,我们需要将一些引脚配置为输出,并将其他引脚配置为输入。在本教程中,我们将使用STM32微控制器来实现一个基本的智能储物柜控制系统。在主函数中,我们将不断循环读取传感器数据,并根据数据的变化来控制储物柜的开关和显示相关信息。这个函数将读取人体感应传感器、温湿度传感器和光照传感器的数据,并将数据存储到相应的变量中。

m0_75244442的博客 658

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

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

GitHub_boy的博客 3878

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android 蓝牙通讯demo

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

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

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

Elena's Blog 1749

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

m0_57545130的博客 241

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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、付费专栏及课程。

余额充值