Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BlockingQueue take vs poll_Java - Fatal编程技术网

Java BlockingQueue take vs poll

Java BlockingQueue take vs poll,java,Java,我正在运行一个流程,其中: 如果队列中有项目,则应处理该项目 每5分钟应至少处理一个项目。如果没有,则添加一个虚拟项 我正在考虑使用BlockingQueue来实现这一点-它提供了函数take()和poll(timeout,timeunit) 使用take我只需要一个while(item=queue.take()){process(item);}。第二个线程将每隔5分钟向队列中添加一个虚拟项,因此每5分钟保证至少处理这一个虚拟项 用poll我会做 while(true){ item

我正在运行一个流程,其中:

  • 如果队列中有项目,则应处理该项目
  • 每5分钟应至少处理一个项目。如果没有,则添加一个虚拟项
我正在考虑使用BlockingQueue来实现这一点-它提供了函数
take()
poll(timeout,timeunit)

使用
take
我只需要一个
while(item=queue.take()){process(item);}
。第二个线程将每隔5分钟向队列中添加一个虚拟项,因此每5分钟保证至少处理这一个虚拟项

poll
我会做

while(true){
    item = queue.poll(5L, TimeUnit.MINUTES);
    if(item == null) item = 'dummyitem';
    process(item);
}

这些方法之间有区别吗,哪一种更好?

如果你这样做了(2)你不会依赖其他人添加虚拟项,不管这有什么意义。如果队列中没有任何内容,使用take()的方法只会挂起,直到有内容为止。你的通话过程能忍受一次等待5分钟吗?我也倾向于
poll
,只是不确定@paisanco此while循环也将在其自己的线程中运行,因此它不会干扰任何内容。如果您这样做(2)您不会依赖其他人添加虚拟项,无论这可能有什么意义。如果队列中没有任何内容,则take()的方法将挂起,直到出现某些内容为止。你的通话过程能忍受一次等待5分钟吗?我也倾向于
poll
,只是不确定@paisanco这个while循环也将在它自己的线程中运行,所以它不应该干扰任何东西。