失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android 多线程类 Android 多线程处理之多线程用法大集合

android 多线程类 Android 多线程处理之多线程用法大集合

时间:2019-06-03 12:49:56

相关推荐

android 多线程类 Android 多线程处理之多线程用法大集合

类型:服务器区大小: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 多线程处理之多线程用法大集合》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。