我讀了關於java中的併發隊列,並且我收到關於LinkedTransferQueue的混淆。什麼是LinkedTransferQueue的類型(是阻塞隊列還是非阻塞隊列)?我已經閱讀LinkedTransferQueue使用CAS(比較和交換)方法,並從不安全的公園方法,並從像ConcurrentLinkedQueue節點和指針組成,它推動的想法,它是一個非阻塞隊列。但接口TransferQueue延伸BlockingQueue。它看起來不明確。最後是LinkedTransferQueue阻塞還是非阻塞隊列?LinkedTransferQueue是阻塞隊列還是非阻塞隊列?
回答
LinkedTransferQueue
是一個無界隊列,儘管它是BlockingQueue
它實際上永遠不會達到普通的生產者/消費者模式正常BlockingQueue實現可能實現的。
那麼,它是或不是它阻止?它實際上取決於操作。例如,下面列出了一些。
非阻塞操作:
offer
put
add
poll
tryTransfer
阻塞操作:
take
transfer
點是,如果一個操作可以不受阻塞它會實現。由於LinkedTransferQueue被強制爲無限制,因此它可以通過阻塞和非阻塞操作逃脫。
如果有興趣,我通過Java 8實現發現了這一點。
感謝有關方法的解釋,它澄清了情況。你如何區分阻塞和非阻塞方法的區別?其次,你對生產者/消費者和LinkedTransferQueue意味着什麼? – pacman
典型的生產者/消費者使用情況類似於*如果此隊列中有空間,則將此元素放在隊列中,如果不等到有空間,則反之亦然*。由於沒有固定的大小,因此'LinkedTransferQueue'有兩種阻塞模式。 ** 1。**等待一個元素存在於這個隊列中。 ** 2。**等待消耗線程在此隊列中 –
區分。我查看了放置代碼,並且有一個標誌說明我們應該進行什麼類型的操作。 'SYNC','ASYNC','NOW','TIMED'。同步和定時是你的阻止操作,而異步和現在是非阻塞的。 –
- 1. 非阻塞隊列
- 2. 測試非阻塞隊列
- 3. 阻塞隊列Ç
- 4. 阻塞隊列不阻塞線程?
- 5. 是renderer.render()阻塞還是非阻塞?
- 6. 阻塞隊列實現
- 7. Java中的阻塞隊列
- 8. Java,被阻塞的隊列
- 9. 隊列阻塞主線程
- 10. 阻塞隊列和InterruptedException
- 11. 阻塞隊列設計
- 12. REST和阻塞隊列
- 13. 單進程阻塞隊列
- 14. GCD - dispatch_async上阻塞隊列
- 15. 通知(),而不是notifyAll()阻塞隊列
- 16. 非阻塞寫成有序隊列
- 17. 非阻塞Jms隊列發件人
- 18. 是C阻塞還是非阻塞的write()函數?
- 19. 下面的node.js代碼是阻塞的還是非阻塞的?
- 20. NS-3 TCP/UDP套接字是非阻塞還是阻塞?
- 21. 如何檢查I/O操作是阻塞還是非阻塞?
- 22. 是否在同步GCD隊列上放置一個阻止阻塞並暫停其他阻塞的阻塞?
- 23. ThreadPoolExecutor共享相同的阻塞隊列
- 24. 阻塞隊列使用場景
- 25. Scala阻塞隊列,正常等待
- 26. C++阻塞隊列Segfault w/Boost
- 27. C++阻塞隊列與升壓
- 28. 併發問題 - 阻塞隊列
- 29. Java中的併發和阻塞隊列
- 30. 阻塞兩個隊列上的呼叫?
您是否想知道'TransferQueue'是否阻塞或者'ConcurrentLinkedQueue'是否被阻塞?前者是阻塞的,後者不是 –
我想知道事實上的ConcurrentLinkedQueue是阻塞的,但它是通過使用非阻塞算法實現的,因爲這個TransferQueue不能擴展BlockingQueue – pacman
爲什麼你問'TransferQueue'是一個接口),還有'ConcurrentLinkedQueue'(它是一個不會執行'TransferQueue'的類)在同一個問題中?而且,當你閱讀javadoc時,你在問什麼並不明顯? –