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