我试图在Groovy中使用BlockingQueue Java类,根据这个极客健忘文章,您可以使用.poll(some_long, some_time_unit)轮询超时元素
我遇到的问题是这个错误消失了。以下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中使用BlockingQueue.poll函数的正确方法是什么?
发布于 2019-12-02 12:38:56
这个问题用这问题来描述。
作为一种解决办法,您可以使用这样的喜剧:
def bq = new ArrayBlockingQueue<>(10, false, [1, 2, 3])
bq.poll(1, TimeUnit.SECONDS)这使用带有来自ArrayBlockingQueue的3个参数的构造函数:
boolean,它描述默认为false的其他构造函数中的公平性。Collection如果您想要BlockingQueue的不同实现,也可以查看LinkedBlockingQueue:
def bq = new LinkedBlockingQueue([1, 2, 3])
bq.poll(1, TimeUnit.SECONDS)但是具体的实现应该根据你的需要来选择。两者的主要区别在于LinkedBlockingQueue是基于链表实现的,而ArrayBlockingQueue是基于数组实现的。另外,LinkedBlockingQueue是可选有界的,ArrayBlockingQueue总是有界的。
https://stackoverflow.com/questions/59138802
复制相似问题