0
在從Socket連接,我需要一個Java應用程序閱讀項目(此處未進一步概述的原因)的存在像SynchronousQueue一樣的實現嗎?
- 輸入項目由單個線程使他們的順序被保存處理。
- 在處理之前要緩衝的輸入項目,以便可以從套接字中讀取新項目,而其他項目仍在處理中。
- 讀線程的緩衝區已滿
所以其實我想用一個工作線程對緩衝項目工作從插座接收,只要阻斷。並且在工作者線程和讀取器線程之間有一個適配隊列作爲緩衝區,這將是一種具有FIFO容量的公平的SynchronousQueue
。
應該表現得像與容量的ArrayBlockingQueue
或LinkedBlockingQueue
同時不充分和類似於SynchronousQueue
時充分含義
put
隊列將只阻塞線程如果隊列是滿所需要的隊列take
如果隊列爲空,將只在隊列爲空時阻塞線程take
對於完整隊列將給調用者下一個FIFO元素並解鎖並從下一個線程插入元素waitin g還put
操作put
對空隊列要麼交出元素線程在等待一個poll
操作或將其插入
是否有這樣的任何已知的實現還是我推出我的擁有?
與ArrayBlockingQueue有什麼不同? – axtavt 2012-08-10 16:31:54
你能否澄清一下'ArrayBlockingQueue'的不同之處?如果沒有可用的線程,則帶有SynchronousQueue的ExecutorService不會阻塞。 – 2012-08-10 16:32:16
@PeterLawrey是的你是對的! 'ThreadPoolExecutor'實際上不使用'put'而是'offer'。所以看起來,將一個ThreadPoolExecutor與一個「SynchronousQueue」一起使用一個線程是沒有任何意義的。我在文中澄清說,我必須使用自己的工作線程來重複輪詢隊列中的項目。 – Gandalf 2012-08-10 17:41:50