本文是介绍线程池的基础篇。

一、线程池的作用

创建异步线程的弊端:

  1、每次new Thread创建对象,导致性能变差。

  2、缺乏统一的管理,可能导致无限制的线程运行,严重的后果就是OOM 或者死机。

使用线程池的有点:

  1、重用性大,减少对象的创建,提高性能。

  2、可有效控制并发线程数,提高系统资源利用率,避免资源争夺。

  3、可提供多种功能:定时、循环、并发、单一等功能。

三、ExecutorService 线程池

  Java通过Executors提供了四类常用的线程池。  

1、newCachedThreadPoll

  定义一个线程池,当线程池里面有可复用的线程,重用线程执行,如果没有,新建线程执行。线程池容量可以无线大。

  ExecutorService cacheThread = Executors.newCachedThreadPool();
        for (int i = 0; i < 100; i++) {
            cacheThread.execute(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub                   
                }
            });
        }

2、newSingleThreadExecutor

  创建一个线程池,只有唯一的一个活动的工作线程,有序(FIFO,LIFO,优先级等顺序)的处理队列中的任务。

  ExecutorService singleExecutor = Executors.newSingleThreadExecutor();
        for (int i = 0; i < 100; i++) {
            singleExecutor.execute(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    
                }
            });
        }  

3、newFixedThreadPool

  定义一个可用并发数的线程池,超过并发数的线程,在队列里面等待。

  ExecutorService fixedThread = Executors.newFixedThreadPool(3);
        for(int i = 0; i < 100 ; i ++){
            fixedThread.execute(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    
                }
            });
        }  

4、newScheduledThreadPool

  创建一个定长线程池,支持定时及周期性任务执行。

  ScheduledExecutorService scheduledThread = Executors.newScheduledThreadPool(3);
        //延时执行
        scheduledThread.schedule(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                
            }
        }, 2*1000, TimeUnit.SECONDS);
        //固定的间隔执行,不受任何影响
        scheduledThread.scheduleAtFixedRate(new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                
            }
        }, 10*1000, 1*1000, TimeUnit.SECONDS);
        //当线程执行完毕后的,开始计算时间间隔再次执行
        scheduledThread.scheduleWithFixedDelay(new Runnable() {            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                
            }
        }, 10*1000, 1*1000, TimeUnit.SECONDS);

  

四、AnsyncTask异步线程

  提供两个线程池:

  1、THREAD_POOL_EXECUTOR异步线程池    

  2、SERIAL_EXECUTOR同步线程池

 使用方式:

  new AsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, 0);

  注意:

  1、当默认使用AsyncTask.execute()执行异步任务,默认使用SERIAL_EXECUTOR.

  2、SERIAL_EXECUTOR是在THREAD_POOL_EXECUTOR基础上,加一个task的集合来维护顺序的。

  

Android 开发 ThreadPool(线程池) 总结的更多相关文章

  1. Android开发之线程池使用总结

    线程池算是Android开发中非常常用的一个东西了,只要涉及到线程的地方,大多数情况下都会涉及到线程池.Android开发中线程池的使用和Java中线程池的使用基本一致.那么今天我想来总结一下Andr ...

  2. android中的线程池学习笔记

    阅读书籍: Android开发艺术探索 Android开发进阶从小工到专家 对线程池原理的简单理解: 创建多个线程并且进行管理,提交的任务会被线程池指派给其中的线程进行执行,通过线程池的统一调度和管理 ...

  3. ThreadPool线程池 小结

    ThreadPool类提供一个线程池,该线程池可用于发送工作项.处理异步 I/O.代表其他线程等待以及处理计时器 线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程.一个线程 ...

  4. 转载【浅谈ThreadPool 线程池】

    浅谈ThreadPool 线程池 http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html

  5. 【多线程】-ThreadPool线程池

    ThreadPool介绍: Thread类是一个静态类,所有不存在实例化构造函数操作,直接可以调用其内所存在的方法. 微软官网给出的解释: 提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 ...

  6. .net 线程基础 ThreadPool 线程池

    1. ThreadPool 线程池异步: //public static bool QueueUserWorkItem(WaitCallback callBack); //public static ...

  7. 浅谈ThreadPool 线程池(引用)

    出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的 ...

  8. 多线程之旅(ThreadPool 线程池)

    一.什么是ThreadPool 线程池(源码) 1.线程池顾名思义,有我们的系统创建一个容器装载着我们的线程,由CLR控制的所有AppDomain共享.线程池可用于执行任务.发送工作项.处理异步 I/ ...

  9. Android下基于线程池的网络访问基础框架

    引言 现在的Android开发很多都使用Volley.OkHttp.Retrofit等框架,这些框架固然有优秀的地方(以后会写代码学习分享),但是我们今天介绍一种基于Java线程池的网络访问框架. 实 ...

随机推荐

  1. BZOJ2005: [Noi2010]能量采集(欧拉函数)

    Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种 ...

  2. 转:Laravel 项目开发规范

    文件介绍很好 值得细细看看 https://www.jianshu.com/p/e464a35e5ed2 https://learnku.com/docs/laravel-specification/ ...

  3. 卸载Windows控制面板的程序和功能中找不到的一些软件的方法

    卸载Windows控制面板的程序和功能中找不到的一些软件的方法 找到卸载程序进行卸载即可

  4. Tomcat指定特定的java

    Tomcat指定特定的java 制作人:全心全意 安装好Tomcat后,进入bin目录,找到setclasspath.bat或setclasspath.sh文件,在文件前加入以下内容 Windows: ...

  5. R 分析回归(一元回归)

    x <- c(,,,,,,,,,) # build X(predictor) y <- c(,,,,,,,,,) # build Y(dependent variable) mode(x) ...

  6. git客户端的常用命令

    注意:仓库只有管理员建的你才有权限上传,不然自己建的也没用,没权限上传 1.远程仓库路径查询 git remote -v 2.添加远程仓库 git remote add origin <你的项目 ...

  7. springMVC三大组件、spring主要jar包、

    一.springMVC三大组件 处理器映射器   RequestMappingHandlerMapping 处理器适配器 RequestMappingHandlerAdapter 视图解析器  Int ...

  8. xampp安装配置比较容易卡住的地方

    xampp作为一款集成建站软件,方便了不少初学的开发者,但是虽然是集成和傻瓜式的安装,还是会遇到一些容易卡壳的地方,这里记录自己觉得一些比较重要的东西. 1.端口问题 如图是我改之后的端口,原来端口为 ...

  9. ActiveMQ注意事项

    1.消费者在消费数据的过程当中报错,那么就会自动重试        2.如果消费者报错,会自动重试,但是数据已经真实拿到,可能会造成重复消费,幂等性问题            思路,每一次监听到数据后 ...

  10. pandas玩转excel-> (2)如何利用pandas读取excel数据文件

    import pandas as pd #将excel文件读到内存中,形成dataframe,并命名为peoplepeople=pd.read_excel('D:/python结果/task2/Peo ...