Okhttp任务队列工作原理

本文探讨Okhttp的线程池管理,通过Dispatcher类实现线程复用和调度。介绍了线程池的核心参数及工作原理,分析Call对象如何放入线程池执行,并详细阐述了线程从等待队列到执行队列的过程,展示了如何在高并发下有效地管理线程资源。
摘要由CSDN通过智能技术生成

1 概述

1.1 引言

android完成非阻塞式的异步请求的时候都是通过启动子线程的方式来解决,子线程执行完任务的之后通过handler的方式来和主线程来完成通信。无限制的创建线程,会给系统带来大量的开销。如果在高并发的任务下,启用个线程池,可以不断的复用里面不再使用和有效的管理线程的调度和数量的管理。就可以节省系统的成本,有效的提高执行效率。

1.2 线程池ThreadPoolExecutor

ThreadPoolExecutor是java线程创建工具。存在于java.util.concurrent 包中。
看构造方法:

   public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);
    }
  • corePoolSize : 最小并发线程数。
  • maximumPoolSize :线程池中最大的线程池并发数。
  • keepAliveTime : 当线程的数目大于corePoolSize时,线程的最大存活时间。
  • unit : 时间单位
  • BlockingQueue 工作队列

okhttp的线程池对象存在于Dispatcher类中。实例过程如下

  public synchronized ExecutorService executorService() {
    if (executorService == null) {
      executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值