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分钟应至少处理一个项目。如果没有,则添加一个虚拟项
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循环也将在它自己的线程中运行,所以它不应该干扰任何东西。