java面试记忆法之ArrayBlockingQueue

  1. 简短介绍下ArrayBlockingQueue : 这是一个基于数组实现的一个有界阻塞式队列,一般看到Array差不多这个底层数据结构就是数组了。blocking 阻塞 Queue 队列 很好记吧。
  2. ArrayBlockingQueue 继承AbstractQueue 实现BlockingQueue 接口 AbstractQueue 明明实现了Queue 接口,BlockingQueue 也是实现了Queue 接口 为啥要写2遍? 这个很简单 我就让你知道 你要实现BlockingQueue 就是要实现阻塞式的队列 其实就是***见名知意***的一种效果哈
  3. AbstractQueue 里面的方法都很简单哈 , 看了这边 就知道为啥add 和offer, element和peek的区别了 来个栗子 public boolean add(E e) {
    if (offer(e))// 这里其实调用的还是offer 只是在队列满的时候 抛出异常了 就这就是区别了
    return true;
    else
    throw new IllegalStateException(“Queue full”);
    }
    看 add 里面调用的还是offer 这个抽象方法 但是他有个else 会抛出异常 offer 则不会 看arrayblockingqueue 里对offer的实现 public boolean offer(E e) {
    checkNotNull(e);
    final ReentrantLock lock = this.lock;
    lock.lock();
    try {
    if (count == items.length)
    return false;
    else {
    enqueue(e);
    return true;
    }
    } finally {
    lock.unlock();
    }
    }
    只返回true false 不抛出异常。。。。重点 考试要考的 。。 element和peek 其实也是这种关系。

总结:其实如果面试问这几种方法的区别 其实就在看你是否只是强行记忆还是深刻源码理解问题,如果看了源码 根本就不用再去记忆这些区别 而且这个ArrayBlockingQueue 源码本身不多 很好读 。找个时间 我对每个方法都来进行分析一波。

你可能感兴趣的:(java)