类型:服务器区大小:21KB语言:中文 评分:6.6

标签:

立即下载

第 3 页 ExecutorServie线程池

5.ExecutorServie线程池

通过Executors的静态方法来创建,一般有三种:

1.单线程 :Executors.newSingleThreadExecutor();

2.固定数量线程 :Executors.newFixedThreadPool();

3.动态线程 :Executors.newCachedThreadPool();

这里我们用固定5个线程来应用,使用方法是创建ExecutorService对象,然后执行submit(r)可以发起一个Runnable对象。用线程池来管理的好处是,可以保证系统稳定运行,适用与有大量线程,高工作量的情景下使用,假如要展示1000张图片如果创建1000个线程去加载,保证系统会死掉。用线程池就可以避免这个问题,可以用5个线程轮流执行,5个一组,执行完的线程不直接回收而是等待下次执行,这样对系统的开销就可以减小不少。

private void loadImagesByExecutors(final String url,final int id){

service.submit(new Runnable(){

@Override

public void run() {

// TODO Auto-generated method stub

Log.e("当前线程:", ""+Thread.currentThread().getName());

try {

final Drawable drawable  = Drawable.createFromStream(new URL(url).openStream(), "image.gif");

mainHandler.post(new Runnable(){

@Override

public void run() {//这将在主线程运行

// TODO Auto-generated method stub

((ImageView)MainActivity.this.findViewById(id)).setImageDrawable(drawable);

}

});

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

}

Log:

其实可能没有说清楚,第一种不算多线程。

1.loadImagesByHandler()是通过Handler.post()方法,构建两个Handler进行通信。

2.loadImagesByThread(),这个是直接new Thread()发起线程,在主线程的handler处理消息

3.loadImageByAsyncTask(),这个用的是异步任务,所有实现在它的内部结构里,可以在里头操作Ui.

4.loadImagesByExecutors()用的是线程池,使得线程可控,保证稳定运行。

其实常用的就是后三种,第二个用法灵活,简单,但不适宜大数量任务;第三个一般适用于单个任务,一次性任务;第四个一般用于大数量,高密度执行的使用情景,比如批量加载图片,批量下载文件等。

看一眼图吧:

android 多线程类,Android 多线程处理之多线程用法大集合相关推荐

  1. android 初始化类,Android 常用编程技巧/Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)...

    1.设置屏幕的亮度: WindowManager.LayoutParams lp=getWindow().getAttributes(); lp.screenBrightness=1.0f; getW ...

  2. 转载 Android 多线程处理之多线程用法大集合

    handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程. 1.如果像这样,是可以操作ui ...

  3. android多线程文章,Android 多线程处理之多线程用法大集合

    类型:服务器区大小:21KB语言:中文 评分:6.6 标签: 立即下载 第 4 页 全部源码 全部源码: 1 package com.bvin.exec; 2 3 import java.io.IOE ...

  4. c++ 多线程 类成员函数_多线程(C++/Python)

    多线程(C++/Python) 本文包括一下内容: 通过C++11的标准库进行多线程编程,包括线程的创建/退出,线程管理,线程之间的通信和资源管理,以及最常见的互斥锁,另外对python下多线程的实现 ...

  5. android 管理类,android 线程管理类

    1. 延时任务以及取消延时的应用场景:实时搜索,文字内容变化时候不发送请求,当停止变化指定时间后再发送请求 2. 使用方法: // 回到主线程 MainThreadHelper.runOnUIthre ...

  6. android webview 类,Android开罐头——WebView高可扩展性封装(二)

    一.回顾与规划 回顾一下,我们在第一章中已经完成了一些封装: 我们看一下我们的目前的架构图片: 初步架构通信图 我们已经实现了: 抽象父类WebDelegate,用来管理webView的生命周期,以及 ...

  7. 百度地图android绘图类,Class:android总类/android离线地图类

    出自百度地图API 跳转到:导航 , 搜索 com.baidu.mapapi 类 MKOfflineMap java.lang.Object ∟ com.baidu.mapapi.MKOfflineM ...

  8. android+坐标类,Android Path和PathMeasure类的使用之获取圆弧上的坐标值

    问题: 已知图中的中心圆点在屏幕上的坐标为(x, y),分别求出点1.2.3.4的坐标值! 解决方法: 1)以圆点坐标(x,y)为中心画一个矩形RectF, 2)再通过Path类画一个90度(180- ...

  9. android pak文件_android 文件读写I/O 大集合 (持续更新)

    一.资源文件 res/assets 资源类文件在程序编译后,据说是只能读取不能修改的,所以我就思考,是不是编译打包时,会自动把资源文件以二进制编译到程序包里?但是既然二进制bytes都可以修改,那么资 ...

最新文章

  1. git 命令详解_再次学习Git版本控制工具
  2. win10 radmin远程不了_不用QQ也能电脑远程,win10这隐藏功能太良心了!真后悔发现太晚...
  3. QML笔记-QML基本数据类型的使用
  4. java 软考_关于软考
  5. 数字信号处理--语音信号变声报告
  6. docker开启远程访问后,重启失败的解决方案
  7. 如何选相应的尺寸码数
  8. 2021年施工员-土建方向-岗位技能(施工员)免费试题及施工员-土建方向-岗位技能(施工员)考试总结
  9. twitter推特全量用户收集与发文采集
  10. 国内十大源码下载类知名网站总体简评
  11. SmartRefreshLayout上拉刷新和下拉加载使用心得
  12. 【转】LTE基本架构
  13. 基于springboot实现大学生租房系统演示【附项目源码】
  14. AI云边端EasyCVR平台新功能解析:支持为角色选择多级分组
  15. CSR 蓝牙芯片运行SPP服务是PS 设置
  16. 什么是虚拟主机?云服务器的优劣势有哪些?
  17. GSMA移动360会议首次亮相马来西亚
  18. 《Effective C++》全局概述篇
  19. Python数据可视化 Pyecharts 制作 Parallel 平行坐标系
  20. 2021-08-14c++面向对象的三大特性之二——继承

热门文章

  1. Maven使用技巧001--- 离线更新nexus中央仓库索引的方案
  2. tomcat J2EEApplication=none,J2EEServer=none
  3. android开发之添加按钮事件的方法
  4. python 正交矩阵_协方差矩阵的计算、PCA
  5. 嵌入式操作系统内核原理和开发(事件)
  6. sql日期大于某天_(十五)sql/Linux 小技巧
  7. apk 打包 java出错_Android Release 打包提示 错误:找不到符号
  8. c语言if全部用法,关于if的用法
  9. c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...
  10. php火的原因,重燃你的PHP安全之火