美文网首页
SynchronousQueue

SynchronousQueue

作者: From64KB | 来源:发表于2020-11-13 17:02 被阅读0次

    在谈SynchronousQueue之前,先来回顾下 ArrayBlockingQueue 还记得怎么样自己实现一个 ArrayBlockingQueue吗?忘记的话,见这里
    可以通过ArrayBlockingQueue 来认识SynchronousQueue。有两个线程Thread-1Thread-2分别构成生产者和消费者,如果使用ArrayBlockingQueue 来作为两者沟通的桥梁的话,可以分为以下几种情况:

    1. ArrayBlockingQueue为空 ,Thread-2想要获取item,此时Thread-2被block住
    2. Thread-1ArrayBlockingQueue增加item,Thread-2获取item,都不会发生block
    3. ArrayBlockingQueue已满, Thread-1想要继续增加item,此时Thread-1会被block住

    如果是SynchronousQueue来作为两者沟通的桥梁呢?
    1.SynchronousQueue为空,Thread-2想要获取item,此时Thread-2被block住

    1. Thread-1SynchronousQueue添加item, Thread-1被block住,直到Thread-2来取走item

    不难看出SynchronousQueue并不会存储item,添加item的线程在item被取走之前会被block住。很多说法是说SynchronousQueue会存储一个item,这是不准确的,SynchronousQueue会block住添加的线程,然后直接把这个item交给获取的线程(hand-off)。

    相关文章

      网友评论

          本文标题:SynchronousQueue

          本文链接:https://www.haomeiwen.com/subject/iwxbbktx.html