Android应用线程池最大线程数量

线程池的大小经验值一般这样设置:(其中N为CPU的核数) 
如果是CPU密集型应用,则线程池大小设置为N+1 
如果是IO密集型应用,则线程池大小设置为2N+1

那么我们的 Android 应用是属于哪一种应用呢?看下他们的定义。

I/O密集型 
I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高。 
CPU-bound 
CPU bound 指的是系统的 硬盘/内存 效能 相对 CPU 的效能 要好很多,此时,系统运作,大部分的状况是 CPU Loading 100%,CPU 要读/写 I/O (硬盘/内存),I/O在很短的时间就可以完成,而 CPU 还有许多运算要处理,CPU Loading 很高。

我们的Android 应用的话应该是属于IO密集型应用,所以数量一般设置为 2N+1。下面的例子是我截取的一段线程池创建的代码:

//参数初始化
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
//核心线程数量大小
private static final int corePoolSize = Math.max(2, Math.min(CPU_COUNT - 1, 4));
//线程池最大容纳线程数
private static final int maximumPoolSize = CPU_COUNT * 2 + 1;
//线程空闲后的存活时长
private static final int keepAliveTime = 30;//任务过多后,存储任务的一个阻塞队列
BlockingQueue<Runnable>  workQueue = new SynchronousQueue<>();//线程的创建工厂
ThreadFactory threadFactory = new ThreadFactory() {private final AtomicInteger mCount = new AtomicInteger(1);public Thread newThread(Runnable r) {return new Thread(r, "AdvacnedAsyncTask #" + mCount.getAndIncrement());}
};//线程池任务满载后采取的任务拒绝策略
RejectedExecutionHandler rejectHandler = new ThreadPoolExecutor.DiscardOldestPolicy();//线程池对象,创建线程
ThreadPoolExecutor mExecute = new ThreadPoolExecutor(corePoolSize, maximumPoolSize,keepAliveTime,TimeUnit.SECONDS,workQueue,threadFactory, rejectHandler
);

Android应用线程池最大线程数量相关推荐

  1. java线程池1001java线程池_深入浅出Java(Android )线程池ThreadPoolExecutor

    前言 关于线程池 在Java/Android开发中,设计到并发的请求,那基本上是离不开线程池了.用线程池的好处: 1.减少线程频繁创建.销毁的开销: 2.好控制并发量,降低OOM的可能,至于原因文中会 ...

  2. Python 多线程总结(2)— 线程锁、线程池、线程数量、互斥锁、死锁、线程同步

    主要介绍使用 threading 模块创建线程的 3 种方式,分别为: 创建 Thread 实例函数 创建 Thread 实例可调用的类对象 使用 Thread 派生子类的方式 多线程是提高效率的一种 ...

  3. 【Android 异步操作】线程池 ( 线程池简介 | 线程池初始化方法 | 线程池种类 | AsyncTask 使用线程池示例 )

    文章目录 一.线程池简介 二.线程池初始化方法简介 三.线程池使用示例 一.线程池简介 线程池一般是实现了 ExecutorService 接口的类 , 一般使用 ThreadPoolExecutor ...

  4. 线程池最佳线程数量到底要如何配置?

    一.前言 对于从事后端开发的同学来说,线程是必须要使用了,因为使用它可以提升系统的性能.但是,创建线程和销毁线程都是比较耗时的操作,频繁的创建和销毁线程会浪费很多CPU的资源. 此外,如果每个任务都创 ...

  5. 易语言mysql线程池数量_线程池最佳线程数量到底要如何配置?

    前言 对应从事后端开发的同学来说,线程是必须要使用了,因为使用它可以提升系统的性能.但是,创建线程和销毁线程都是比较耗时的操作,频繁的创建和销毁线程会浪费很多CPU的资源.此外,如果每个任务都创建一个 ...

  6. 【Android 异步操作】线程池 ( 线程池作用 | 线程池种类 | 线程池工作机制 | 线程池任务调度源码解析 )

    文章目录 一.线程池作用 二.线程池种类 三.线程池工作机制 四.线程池任务调度源码解析 一.线程池作用 线程池作用 : ① 避免创建线程 : 避免每次使用线程时 , 都需要 创建线程对象 ; ② 统 ...

  7. ReentrantLock+线程池+同步+线程锁

    1.并发编程三要素? 1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行. 2)可见性 可见性指多个线程操作一个共享变量时,其中一个线程对变量 ...

  8. eclipse mysql 线程池_JAVA5线程池使用

    线程池是Java5提供的一个新技术,方便我们快速简洁的定义线程池.包括如下: 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任 ...

  9. 【Java 并发编程】线程池机制 ( 线程池状态分析 | 线程池状态转换 | RUNNING | SHUTDOWN | STOP | TIDYING | TERMINATED )

    文章目录 一.线程池状态分析 一.线程池状态分析 线程池的状态在 ThreadPoolExecutor 源码中定义 : private final AtomicInteger ctl = new At ...

最新文章

  1. iis上实现虚拟目录
  2. 三维动画属于计算机专业吗,三维动画设计专业属于文科还是理科
  3. c语言 goto 跳出循环,goto语句可以跳出循环.ppt
  4. 系统即将关机请保存关机是由nt_设置Windows电脑自动关机
  5. adjacent angle_GRE/GMAT 数学之平面几何
  6. XenCenter建立SR存储库,添加系统ISO镜像源
  7. MPC5744P-时钟模块
  8. 风控建模一、初步认识风控
  9. Git 使用源代码包编译、配置部署和使用 使用包管理工具安装
  10. 自动控制理论——拉普拉斯变换定义及性质
  11. 物联网-移远m26使用MQTT协议,AT指令对接阿里云
  12. 数据透视表(合并同类型数据求和)
  13. c# api接口管理
  14. win10计算机休眠在哪里调,win10设置休眠时间怎么操作_win10如何更改电脑休眠时间...
  15. spring data redis 配置
  16. Springboot接入华为云短信平台
  17. Type parameter T has incompatible upper bounds
  18. PHP编写rss源(续)
  19. Koomail VS. Foxmail
  20. foxmail导地址簿 乱码_foxmail的乱码之谜

热门文章

  1. 高效运维11问 (有幸得与惠普HPE高级顾问一次交心)
  2. 一本好书《AdvancED flex4》
  3. 解析RequestsCookieJar问题
  4. linux关闭redis时报NOAUTH Authentication required
  5. c语言程序sqrt显示错误,错误提示sqrt没有定义,不知道怎么修改,请指教
  6. ipad手写笔有没有必要买?超实用的平板电脑手写笔推荐
  7. OpenFlow:简述对OpenFlow协议的认识
  8. 系统制作U盘两种方法及优缺点-UltraISO和Win32DiskImager,制作后怎么清空U盘恢复正常使用
  9. freenode这个网站是做什么的?
  10. 爬虫 第三讲 数据解析