/**
 * 线程池管理类
 */

public class MyThreadPoolManager {/**
     * 说明:下面这些常量我是根据AsyncTask的源码配置的,大家可以根据自己需求自行配置
     */
    //根据cpu的数量动态的配置核心线程数和最大线程数
    private static final int CPU_COUNT         = Runtime.getRuntime().availableProcessors();//核心线程数 = CPU核心数 + 1
    private static final int CORE_POOL_SIZE    = CPU_COUNT + 1;//线程池最大线程数 = CPU核心数 * 2 + 1
    private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;//非核心线程闲置时超时1s
    private static final int KEEP_ALIVE        = 1;// 要确保该类只有一个实例对象,避免产生过多对象消费资源,所以采用单例模式
    private MyThreadPoolManager() {}private static MyThreadPoolManager sInstance;public synchronized static MyThreadPoolManager getsInstance() {if (sInstance == null) {sInstance = new MyThreadPoolManager();}return sInstance;}// 线程池的对象
    private ThreadPoolExecutor executor;// 使用线程池,线程池中线程的创建完全是由线程池自己来维护的,我们不需要创建任何的线程
    // 我们所需要做的事情就是往这个池子里面丢一个又一个的任务
    public void execute(Runnable r) {if (executor == null) {/**
             * corePoolSize:核心线程数
             * maximumPoolSize:线程池所容纳最大线程数(workQueue队列满了之后才开启)
             * keepAliveTime:非核心线程闲置时间超时时长
             * unit:keepAliveTime的单位
             * workQueue:等待队列,存储还未执行的任务
             * threadFactory:线程创建的工厂
             * handler:异常处理机制
             *
             */
            executor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE,KEEP_ALIVE, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(20), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());}executor.execute(r);// 把一个任务丢到了线程池中

    }public void cancel(Runnable r) {if (r != null) {executor.getQueue().remove(r);//把任务移除等待队列
        }}
}

线程池的使用以及其工具类的封装相关推荐

  1. day14 线程池、原子性、并发工具类

    目录 一.线程池 1.1 线程状态 1.2 线程池的基本原理 1.3 Executors默认线程池 1.4 创建指定上限的线程池 1.5 ThreadPoolExecutor(线程池执行器) 1.5. ...

  2. Fresco图片加载框架的介绍,相关开源库以及工具类的封装

    Fresco图片加载框架的介绍,相关开源库以及工具类的封装 本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 简介 Fresco 是Facebook开源的安卓上的 ...

  3. Redis工具类的封装

    Redis工具类的封装 <dependency><groupId>redis.clients</groupId><artifactId>jedis< ...

  4. java练习(数组工具类的封装)[目前写过最长的代码,虽然不难]

    java练习(数组工具类的封装)[目前写过最长的代码,虽然不难] package myUtil.arrayUtil;public class ArraysUtil {/*** 升序排列一个byte数组 ...

  5. javascript 总结(常用工具类的封装)(转)

    转载地址:http://dzblog.cn/article/5a6f48afad4db304be1e7a5f javascript 总结(常用工具类的封装) JavaScript 1. type 类型 ...

  6. javascript 总结(常用工具类的封装,转)

    javascript 总结(常用工具类的封装) 前言 因为工作中经常用到这些方法,所有便把这些方法进行了总结. JavaScript 1. type 类型判断 isString (o) { //是否字 ...

  7. C# 网络爬虫+HtmlAgilityPack+Xpath+爬虫工具类的封装的使用

    目录 1 工具准备 2 思路准备 3 附加知识准备--XPath 简述 看看例子 用XPath来寻找标签 获取所有同名的标签 获取指定标签 一个实例 最后的补充 4 代码实现 5 爬虫工具类的封装 6 ...

  8. JWT|概述|JWT结构|JWT在java中的使用|JWT工具类的封装|JWT在springboot中的使用|JWT与拦截器的配合

    JWT ! 前记: 官网:https://jwt.io/ jwt有人说是用计算力换空间(相对于session) 小程序后台要求全部用springboot实现..登录状态的管理:本来想用自己随便生成UU ...

  9. 02java进阶03-异常、线程、同步、线程池、Lambda表达式、File类、递归

    目录 一.异常 二.异常的处理 三.自定义异常 四.多线程 五.线程.同步 5.1.线程 5.2同步 5.3线程安全 5.4线程状态 六.等待唤醒机制 6.1 线程间通信 6.2 等待唤醒机制 6.3 ...

最新文章

  1. 关于C#中编译器保证变量必须初始化规则猜想
  2. Tomcat报错:Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
  3. android程序在调试时出现了套接字异常“java.net.SocketException: Permission denied”该如何解决...
  4. 使用Spring整合Quartz轻松完成定时任务
  5. javascript中的this
  6. 决策树-熵计算-ID3算法(转)
  7. 第三次学JAVA再学不好就吃翔(part101)--IO流
  8. 数字城市杭州执法管理平台测试计划【软件测试与工程】
  9. 接口如何保证幂等性的解决方案
  10. 人工智能之-产生式系统
  11. Word、Excel操作技巧大全
  12. 念荆轲[原创诗一首]
  13. 宁录哨兵机器人_能团灭X战警的哨兵机器人是漫威最强机器人吗?奥创:我不服!...
  14. iOS 5 故事板进阶(1)
  15. 在UniApp的H5项目中,生成二维码和扫描二维码的操作处理
  16. 用VB操作注册表 [转]
  17. 鸿蒙支持手机型号,推出鸿蒙,放弃安卓?华为新机入网,鸿蒙首发机型确定!...
  18. 简单的理解unicode和utf-8的关系
  19. 2022年熔化焊接与热切割考试题模拟考试题库及模拟考试
  20. Hbase(3):HBase常用shell

热门文章

  1. Eclipse 使用 SVN 插件后修改用户方法汇总
  2. python中如何判断一个变量的数据类型?(原创)
  3. C#中完美克隆引用类型的对象
  4. C#操作EXCLE表
  5. 决胜圣诞,女神心情不用猜!
  6. 黑盒测试实践---day2
  7. MJRefresh实现刷新(使用它的Block方法)
  8. python之数据运算、字典、列表
  9. 恢复误删除的域用户及几个查询命令
  10. Android ListView 下拉刷新 上拉更多[实例]