http://www.trinea.cn/android/java-android-thread-pool/

http://blog.csdn.net/yaya_soft/article/details/24396357

http://blog.csdn.net/carrey1989/article/details/12002033

线程池使用

说到线程池,平时主要用的是Thread跟AsyncTask,虽然异步任务已经封装了线程池的使用,可没去看源码,里面真正的使用,是不清楚的。
所以,我们都会想为什么要用它?我认为线程池的好处在于,我们可以对开启的线程进行跟进,当不需要处理的时候可以将它干掉,同时当我们定义了一个线程池之后,可以复用线程而不需要开启更多线程,这点对于我们安卓开发是至关重要的,你开启的thread越多意味着你的app内存消耗越多,速度也就越来越慢,提高现有线程的复用是一个很不错的优化。

然后,让我们来看看,java给我们的提供的四种线程池:

newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor:创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

newFixedThreadPool实现:

public class DownTask implements Runnable { private int x;            //线程编号 public DownTask(int x) { this.x = x; } public void run() { System.out.println(x + " thread doing something!"); try { TimeUnit.SECONDS.sleep(5L); System.out.println("第" + x + "个线程休息完毕"); } catch (InterruptedException e) { e.printStackTrace(); } }
}
class FixedThreadPool { public static void main(String[] args) { ExecutorService exec = Executors.newFixedThreadPool(2); for (int i = 0; i < 50; i++) { exec.execute(new DownTask(i)); } }
}

newScheduledThreadPool实现:

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {@Overridepublic void run() {System.out.println("delay 3 seconds");}
}, 3, TimeUnit.SECONDS);
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {System.out.println("delay 1 seconds, and excute every 3 seconds");}
}, 1, 3, TimeUnit.SECONDS);

所以,java线程池的使用,提升了程序的性能:
重用存在的线程,减少对象创建、消亡的开销,性能佳。
可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
提供定时执行、定期执行、单线程、并发数控制等功能。

以下是总结一些线程池使用的经验:
1、轻量级任务(Runnable对象、Thread对象、Callable对象)可以选择不固定大小的线程池来执行,或者任务数量很少,也可以选择。
2、重量级的线程,每个线程耗时、耗资源都很大,那么就应该考虑固定大小的线程池了。
3、线程池任务的添加执行是JVM内部机制控制的,你不用担心循环添加很多任务会把固定线程池的池子撑破。
4、线程池初始化数量是根据系统的性能等要求来测试决定的,不是凭空想象。
5、另外,多线程编程中,要注意释放一些不要的资源,以便重新利用。像那个巨大空循环,会耗费大量的cpu和内存,以致系统没能力去做别的事情了,如果for语句便利一个庞大的集合,遍历完成后,最好可以讲null赋给集合以便尽快被垃圾回收器回收掉。
6、线程池给多线程编程带来了极大的便利,但这个API本身描述很模糊。在使用线程池的时候,一定要注意关闭池的策略。如果忘记关闭了,程序会一直等待。

Android 线程池使用相关推荐

  1. Android 线程池概念及使用

    一:使用线程池的原因 在android开发中经常会使用多线程异步来处理相关任务,而如果用传统的newThread来创建一个子线程进行处理,会造成一些严重的问题: 在任务众多的情况下,系统要为每一个任务 ...

  2. android 线程池

    为什么用线程池 创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3 如果T1+T3>T2 ...

  3. Android 线程池的使用

    线程池优点 提到线程池就必须先说一下线程池的优点,线程池的优点可以概括为以下四点: * 重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销: * 线程池旨在线程的复用,就避免了创建线程和销毁 ...

  4. Android 线程池管理工具类

    转自Android 线程池 public class AppExecutors {private static final String TAG = "AppExecutors"; ...

  5. Android线程池封装库

    目录介绍 1.遇到的问题和需求 1.1 遇到的问题有哪些 1.2 遇到的需求 1.3 多线程通过实现Runnable弊端 1.4 为什么要用线程池 2.封装库具有的功能 2.1 常用的功能 3.封装库 ...

  6. Java(Android)线程池

      1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? [java] view plaincopy new Thread(new Runnable() { @Over ...

  7. Android线程池详解

    引入线程池的好处 1)提升性能.创建和消耗对象费时费CPU资源 2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多. 我们来看一下线程池的简单的构造 [html] view plaincopy ...

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

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

  9. Android线程池的简单使用

    参考链接 https://blog.csdn.net/u012702547/article/details/52259529 https://blog.csdn.net/wolf909867753/a ...

  10. android 线程池 怎么用,android中的线程池 怎么用

    满意答案 qpierq0n5 2016.05.02 采纳率:52%    等级:13 已帮助:8164人 //在Android中实现线程池,首先需要实现一个线程工厂(ThreadFactory)的子类 ...

最新文章

  1. 初学者如何学Java开发
  2. 让对方ping不通你的主机
  3. Android开发之常用的自定义输入框之EditText
  4. android照片编辑软件,照片编辑免费软件下载-照片编辑软件app下载 v7.45最新版_5577安卓网...
  5. Spring Cloud各组件总结归纳
  6. jdbc mysql myeclipse_关于JDBC连接MySQL的问题,我一直解决不了(Myeclipse 环境下)
  7. functional correspondence by matrix completion
  8. 插件基础篇3:jquery 插件开发备注
  9. 1364:Field 'sex' doesn't have a default value [ SQL语句 ]
  10. python 苹果id申请_以写代学: python 模拟用户注册或登录账号
  11. tar 打包 . 开头的隐藏文件
  12. 计算机无法安装蓝牙驱动,win7电脑蓝牙驱动怎么安装,教您怎么安装
  13. 如何搜索自己博客内的文章
  14. 分布式任务调度组件 Uncode-Schedule
  15. 说明文中国第一台亮子计算机揭秘,2018届九年级语文中考复习(河南)课件:第2部分 第二讲 说明文阅读 2017名题强化训练.ppt...
  16. uni-app/小程序 DCloud appid 说明
  17. element-ui图标显示不出来问题
  18. 海森堡bug_海森堡因超速而停下来警察说,你知道你要走多快,海森堡说
  19. 计算机无法识别ipad2,iTunes无法识别iPad mini怎么办【解决方法】
  20. 编译原理拉链回填技术c语言,编译原理笔记1:概述编译相关的基本知识

热门文章

  1. 我的个人博客:基于Solo的博客站点
  2. 分享一个可以替换迅雷的下载软件 fdm
  3. 沁恒CH582M开发板--点亮LED
  4. 解压命令linux tgz,linux tgz命令详解
  5. Springboot项目如何设计接口中敏感字段模糊查询?
  6. 苹果手机小技巧大全计算机,80%的人都不知道的五个iPhone实用小技巧,不知道的话赶紧看看...
  7. 作为程序员一定要反思,别走我的路:40岁了,还要投简历找工作
  8. android ndk 编译虚幻4,[UE4]Android 打包步骤与keystore生成设置
  9. 对比Excel学openpyxl系列之设置excel数字和条件格式
  10. switch hosts的使用