GoogleGuavaとして実装したいサービスがありますService
。
このサービスは基本的に、while (true)
イベントがに到着したときにイベントを処理するループを実行しますBlockingQueue
。簡略化されたサンプルコードはこちらから入手できます。
https://gist.github.com/3354249
問題は、コードがでブロックすることBlockingQueue#take()
です。そのため、サービスを停止する唯一の方法は、そのスレッドを中断することです。これはGuavaを使用して可能AbstractExecutionThreadService
ですか?
もちろん、この場合は、queue.take()
を使用してポーリングループに置き換えることができるためqueue.poll(1, TimeUnit.SECONDS)
、スレッドを中断する必要がなくなります。でも:
パフォーマンスとコードの可読性の両方の理由から、これは避けたいと思います。
スレッドの中断を回避できない場合もあります。たとえば、からバイトを読み取っているときにサービスがブロックされた場合など
InputStream
です。