我有一项服务,我想实现为 Google Guava Service
。
该服务基本上运行一个while (true)
循环,当事件到达BlockingQueue
. 此处提供了简化的示例代码:
https://gist.github.com/3354249
问题是代码阻塞了BlockingQueue#take()
,所以停止服务的唯一方法是中断它的线程。这可以使用番石榴AbstractExecutionThreadService
吗?
当然,在这种情况下,我可以queue.take()
使用轮询循环替换queue.poll(1, TimeUnit.SECONDS)
,从而消除线程中断的需要。然而:
出于性能和代码可读性的原因,我想避免这样做
在其他情况下,无法避免线程中断,例如,如果服务在从
InputStream
.