ArrayBlockingQueue中方法的实现原理分析

42 阅读1分钟

生产者实现方法分析

add方法分析

在这里插入图片描述

  • 封装了offer方法,能添加成功返回true。不能就直接抛异常

在这里插入图片描述

offer方法的实现

在这里插入图片描述

  • 添加元素分析 在这里插入图片描述

offer带时间的方法分析

在这里插入图片描述

put方法

在这里插入图片描述

消费者实现方法分析

remove方法分析

  • 调用poll方法,队列不为空就返回元素。为空就抛异常

在这里插入图片描述

poll方法

在这里插入图片描述

  • 获取元素方法分析

在这里插入图片描述

poll有时间参数的方法分析

在这里插入图片描述

take方法分析

在这里插入图片描述

什么是虚假唤醒

  • 等待在一个条件上的线程被全部唤醒后会去竞争锁,所以这些线程会一个一个地去消费这个条件,等到后面的线程去消费这个条件时,条件可能已经不满足了,所以每个被唤醒的线程都需要再检查一次条件是否满足。如果不满足,应该继续睡下去;只有满足了才能往下执行。
  • 所以在执行的时候判断不能用if要用while