Groovy BlockingQueue.poll“的;没有方法签名:java.util.ArrayList.poll“;

Groovy BlockingQueue.poll“的;没有方法签名:java.util.ArrayList.poll“;,java,groovy,Java,Groovy,我试图在Groovy中使用BlockingQueueJava类,根据文章,您可以使用轮询超时的元素 我遇到的问题是这个错误被排除了。 下面是groovy脚本: import java.util.concurrent.TimeUnit import java.util.concurrent.BlockingQueue bq=[1, 2, 3] as BlockingQueue bq.poll(1, TimeUnit.SECONDS) 获取以下错误: ERROR groovy.lang.Miss

我试图在Groovy中使用
BlockingQueue
Java类,根据文章,您可以使用
轮询超时的元素

我遇到的问题是这个错误被排除了。 下面是groovy脚本:

import java.util.concurrent.TimeUnit
import java.util.concurrent.BlockingQueue
bq=[1, 2, 3] as BlockingQueue
bq.poll(1, TimeUnit.SECONDS)

获取以下错误:

ERROR groovy.lang.MissingMethodException:
No signature of method: java.util.ArrayList.poll() is applicable for argument types: (Long, java.util.concurrent.TimeUnit$4) values: [1, SECONDS]
Possible solutions: pop(), tail(), tail(), sort(), clone(), wait()

在Groovy中使用Java中的
BlockingQueue.poll
函数的正确方法是什么?

问题已在讨论中描述

作为一种解决方法,您可以使用如下Cometing:

def bq = new ArrayBlockingQueue<>(10, false, [1, 2, 3])
bq.poll(1, TimeUnit.SECONDS)

但是具体的实现应该根据您的需要来选择。这两者之间的主要区别在于
LinkedBlockingQueue
是基于链表实现的,而
ArrayBlockingQueue
是基于数组实现的。另外,
LinkedBlockingQueue
是可选的有界队列,
ArrayBlockingQueue
总是有界的。

谢谢
ArrayBlockingQueue
工作起来很有魅力。我对你的答案投了赞成票,但无法将其标记为接受,因为该问题被标记为重复。
def bq = new LinkedBlockingQueue([1, 2, 3])
bq.poll(1, TimeUnit.SECONDS)