美文网首页
Android基础(25)多线程(三) 线程池

Android基础(25)多线程(三) 线程池

作者: perry_Fan | 来源:发表于2019-02-26 23:22 被阅读0次

    1)Java多线程引发的性能问题,怎么解决?
    2)线程池 。线程池有没有上限?
    3)Android线程有没有上限?
    4)CAS介绍

    线程池概要
    // 创建线程池对象如下
    // 通过 构造方法 配置核心参数
       Executor executor = new ThreadPoolExecutor( 
                                                  CORE_POOL_SIZE,
                                                  MAXIMUM_POOL_SIZE,
                                                  KEEP_ALIVE,
                                                  TimeUnit.SECONDS, 
                                                  sPoolWorkQueue,
                                                  sThreadFactory 
                                                   );
    
    // 构造函数源码分析
        public ThreadPoolExecutor (int corePoolSize,
                                   int maximumPoolSize,
                                   long keepAliveTime,
                                   TimeUnit unit,
                                   BlockingQueue<Runnable workQueue>,
                                   ThreadFactory threadFactory )
    

    内部原理逻辑

    使用流程

    // 1. 创建线程池
       // 创建时,通过配置线程池的参数,从而实现自己所需的线程池
       Executor threadPool = new ThreadPoolExecutor(
                                                  CORE_POOL_SIZE,
                                                  MAXIMUM_POOL_SIZE,
                                                  KEEP_ALIVE,
                                                  TimeUnit.SECONDS,
                                                  sPoolWorkQueue,
                                                  sThreadFactory
                                                  );
        // 注:在Java中,已内置4种常见线程池,下面会详细说明
    
    // 2. 向线程池提交任务:execute()
        // 说明:传入 Runnable对象
           threadPool.execute(new Runnable() {
                @Override
                public void run() {
                    ... // 线程执行任务
                }
            });
    
    // 3. 关闭线程池shutdown() 
      threadPool.shutdown();
    
      // 关闭线程的原理
      // a. 遍历线程池中的所有工作线程
      // b. 逐个调用线程的interrupt()中断线程(注:无法响应中断的任务可能永远无法终止)
    
      // 也可调用shutdownNow()关闭线程:threadPool.shutdownNow()
      // 二者区别:
      // shutdown:设置 线程池的状态 为 SHUTDOWN,然后中断所有没有正在执行任务的线程
      // shutdownNow:设置 线程池的状态 为 STOP,然后尝试停止所有的正在执行或暂停任务的线程,并返回等待执行任务的列表
      // 使用建议:一般调用shutdown()关闭线程池;若任务不一定要执行完,则调用shutdownNow()
    
    
    常见的4类功能线程池
    一. 多线程引发的性能问题如何解决?

    https://blog.csdn.net/luofenghan/article/details/78596950
    1)无限制创建线程
    2)线程同步
    3)伪共享
    4)线程池

    三. Android线程有没有上限

    相关文章

      网友评论

          本文标题:Android基础(25)多线程(三) 线程池

          本文链接:https://www.haomeiwen.com/subject/fnrtuqtx.html