首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy BlockingQueue.poll,“无方法签名: java.util.ArrayList.poll”

Groovy BlockingQueue.poll,“无方法签名: java.util.ArrayList.poll”
EN

Stack Overflow用户
提问于 2019-12-02 12:19:06
回答 1查看 108关注 0票数 1

我试图在Groovy中使用BlockingQueue Java类,根据这个极客健忘文章,您可以使用.poll(some_long, some_time_unit)轮询超时元素

我遇到的问题是这个错误消失了。以下groovy脚本:

代码语言:javascript
复制
import java.util.concurrent.TimeUnit
import java.util.concurrent.BlockingQueue
bq=[1, 2, 3] as BlockingQueue
bq.poll(1, TimeUnit.SECONDS)

获取以下错误:

代码语言:javascript
复制
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函数的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-02 12:38:56

这个问题用问题来描述。

作为一种解决办法,您可以使用这样的喜剧:

代码语言:javascript
复制
def bq = new ArrayBlockingQueue<>(10, false, [1, 2, 3])
bq.poll(1, TimeUnit.SECONDS)

这使用带有来自ArrayBlockingQueue的3个参数的构造函数:

  • 第一个参数是容量
  • 第二个是boolean,它描述默认为false的其他构造函数中的公平性。
  • 具有初始数据的Collection

如果您想要BlockingQueue的不同实现,也可以查看LinkedBlockingQueue

代码语言:javascript
复制
def bq = new LinkedBlockingQueue([1, 2, 3])
bq.poll(1, TimeUnit.SECONDS)

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59138802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档