您的位置:首页 > 移动开发 > Android开发

Android 多线程处理之多线程用法大集合 第 3 页

2015-08-24 16:12 549 查看
第 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()用的是线程池,使得线程可控,保证稳定运行。

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

看一眼图吧:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: