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