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

一、线程池的作用

创建异步线程的弊端:

  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. win10 系统到期的解决方案

    本人是 win10 教育版,今天多次提醒 windows 要到期了(烦银).所以网上找到了解决方法,记录一下. 废话:win10 与之前的 windows 版本一样,有家庭版.专业版.企业版等各个版本 ...

  2. 位运算基础知识及简单例题(待补全Hamilton)

    位运算 +++ 1 : 0000000000...01 2 : 0000000000...10 3 : 0000000000...11 补码 1 + x = 0000000000...00 1 + 1 ...

  3. C语言二级选择题考点汇总-数据结构与算法-【考点一】 什么是算法

      1.算法及其基本特征 算法是指对方案的准确描述,是解决问题的执行步骤. 算法不等于数学上的计算方法,也不等于程序.程序是算法的载体. 算法的基本特征如下: (1)可行性:步骤可实现,执行结果可达到 ...

  4. NFS部署

    yum install nfs-utils -y systemctl restart/enable nfs systemctl status rpcbind vim /etc/exports /dat ...

  5. PhpCms V9调用指定栏目子栏目文章的方法

    PhpCms V9调用指定栏目子栏目文章的方法 第一种,直接写父类id {pc:content action="lists" catid="父类id" num= ...

  6. 初识Mybatis和一些配置和练习

    什么是Mybatis: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyBat ...

  7. 百度api识别验证码登录

    import time from selenium import webdriver from aip import AipOcr def initial(): """ ...

  8. vue 学习3

    在 2.5.0 及以上版本中,如果你使用了单文件组件 $children,$slots,$attrs .... $attrs 可以透传props 注意.模板标签上有:属性="a", ...

  9. sqli-labs5-10(全程sqlmap)

    sqlmap注入教程:https://www.cnblogs.com/ichunqiu/p/5805108.html 前五关直接可以用默认的sqlmap语法跑: python sqlmap.py -u ...

  10. Win10安装1 —— 引言与目录

    本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12368107.html 一:引言 众所周知,电脑出现问题了后,重启 可以解决90 ...