在我的实现中,我使用DelayQueue
来防止对我的方法进行过多的并发访问。我发现DelayQueue
在lock
和poll
方法上都使用了内部offer
,但就我而言,我需要做类似的事情:
if(Objects.nonNull(delayQueue.poll())) {
delayQueue.offer(...);
}
那几行代码不是原子的吗?我可以添加自己的ReentrantLock
并执行以下操作:
try {
lock.lock();
if(poll()) {
offer(...)
}
finally {
lock.unlock();
}
但对我来说这看起来多余,因为我们现在有2个内部调用lock/unlock
和一个外部调用。
有更好的方法吗?