2017-08-23 33 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)如果你现在多长时间要采取的处理元素。