2017-08-23 55 views
0

我在Java中使用一個LinkedBlockingQueue,我想在隊列中持有的元素之前釋放它的線程。換句話說,我想在元素退出隊列之前設置一個延遲。如何保持LinkedBlockingQueue中的元素?

private LinkedBlockingQueue<String> testQue = new LinkedBlockingQueue<String>() 
if (position.equals("leader")) { 
    //process this element as the last one 

可以嗎?

+0

這是我不清楚你想達到的目標。你能否詳細解釋一下這個任務? – JensS

+0

如果我理解正確,您想要延遲處理隊列中可用的元素?你爲什麼想這麼做?也許你在做的是用錯誤的觀點來看問題。如果你解釋你正在嘗試實現什麼,也許有人可以更好地幫助你 – codeCruncher

+0

我正在嘗試使用隊列而不是使用Thread.sleep爲隊列中的特定元素創建延遲。換句話說,如果隊列中的元素是「領導者」,我想延遲或等待1秒鐘。 – CMPE

回答

0

看對的LinkedBlockingQueue的文檔:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedBlockingQueue.html

Ëpeek()獲取,但不移除此隊列的頭,或者返回null,如果此隊列爲空。

ë輪詢()檢索並移除此隊列的頭部,或返回null如果這個隊列是空的。

ë輪詢(長超時,TIMEUNIT單元)獲取並移除此隊列的頭部,如有必要等待將在指定的等待時間的元件變得可用。

你有兩個選擇:

  1. 使用peek()過程中的元素,並使用一個pool()當您完成。你也可以把和pool()一個Thread.sleep(time)之間peek()如果你真的要等到它完成。
  2. 使用poll(long timeout, TimeUnit unit)如果你現在多長時間要採取的處理元素。