OkHttp阻塞式清理线程

OkHttp内部维护一个线程负责清理过期的连接,它是一个死循环,通过wait方法阻塞线程来控制线程的执行时间

1.cleanup方法负责计算清理的时间
-1:代表没有需要清理的线程
如果清理时间大于0,计算下一次清理的时间(让线程等待一段时间再执行)

  private final Runnable cleanupRunnable = new Runnable() {
    @Override public void run() {
      while (true) {
        long waitNanos = cleanup(System.nanoTime());
        if (waitNanos == -1) return;
        if (waitNanos > 0) {
          long waitMillis = waitNanos / 1000000L;
          waitNanos -= (waitMillis * 1000000L);
          synchronized (ConnectionPool.this) {
            try {
              ConnectionPool.this.wait(waitMillis, (int) waitNanos);
            } catch (InterruptedException ignored) {
            }
          }
        }
      }
    }
  };

2.System.nanoTime
纳秒级别的计时,由于计算机的执行速度很快,所以用纳秒来计时更加准确。

3. public final void wait(long timeout, int nanos)
传入nanos纳秒,来减少等待的误差.1毫秒==1000000纳秒,任何1纳秒的误差都将使等待时间加长1毫秒:当nanos>0时,timeout++

        if (timeout < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException(
                                "nanosecond timeout value out of range");
        }

        if (nanos > 0) {
            timeout++;
        }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、线程概念 1. 操作系统中的线程现在的操作系统是多任务操作系统,多线程是实现多任务的一种方式,在操作系统中,每...
    TyiMan阅读 5,905评论 1 35
  • 线程概述 线程与进程 进程  每个运行中的任务(通常是程序)就是一个进程。当一个程序进入内存运行时,即变成了一个进...
    闽越布衣阅读 4,601评论 1 7
  • 十多年过去了,我仍然忘不了那个暑假,忘不了暑假中认识的那个女孩。 (1) 那年我19岁,已经上完大三。她13岁,刚...
    a493a8e859b3阅读 1,643评论 1 0
  • 什么是互联网思维,360周鸿祎说用户为王;腾讯说小步快跑,快速迭代;乐视说我玩的就是跨界;摩拜单车说,互联网思...
    Tonytoni阅读 5,238评论 4 7

友情链接更多精彩内容