正如我们在 Java Linked Blocking Queue 中看到的,take() 方法在从队列中出列之前对尾节点进行锁定/保护。因此,没有 2 个线程会从尾部获取相同的节点。在zookeeper的情况下,所有观察队列根节点的进程都会得到通知,它们都可以抓取相同的节点集并开始处理相同的节点。
那么我怎么能称之为分布式队列呢。我说的是 Zookeeper 的生产者消费者收据。http://zookeeper.apache.org/doc/r3.4.1/zookeeperTutorial.html#sc_producerConsumerQueues