Java 有没有办法以同步方式在DelayQueue中进行轮询和提供?

Java 有没有办法以同步方式在DelayQueue中进行轮询和提供?,java,java.util.concurrent,blockingqueue,Java,Java.util.concurrent,Blockingqueue,在我的实现中,我使用DelayQueue来防止对我的方法进行过多的并发访问。我发现DelayQueue在poll和offer两种方法上都使用内部lock,但在我的情况下,我需要这样做: if(Objects.nonNull(delayQueue.poll())) { delayQueue.offer(...); } 那几行代码不是原子代码,对吗?我可以添加自己的ReentrantLock并执行以下操作: try { lock.lock(); if(poll()) {

在我的实现中,我使用
DelayQueue
来防止对我的方法进行过多的并发访问。我发现
DelayQueue
poll
offer
两种方法上都使用内部
lock
,但在我的情况下,我需要这样做:

if(Objects.nonNull(delayQueue.poll())) {
   delayQueue.offer(...);
}
那几行代码不是原子代码,对吗?我可以添加自己的
ReentrantLock
并执行以下操作:

try {
   lock.lock();
   if(poll()) {
      offer(...)
   }
finally {
   lock.unlock();
}
但这对我来说似乎是多余的,因为我们现在有两个内部调用
lock/unlock
,一个外部调用


有更好的方法吗?

您的代码应该做什么<代码>延迟队列可能不是正确的选择。此外,该代码是线程安全的。它不是原子的。你需要它是原子的吗?我在队列中有10个预定义的元素,在我轮询它们之后,我想在10秒内将它们添加回来。实际上,这是一种限制,可以防止对我的方法进行太多并发访问。为什么要这样做?当然,你的程序比永远在队列中添加东西有更崇高的目的。@Kayaman我编辑了我的问题