私はLinkedBlockingQueue
何百万もの文字列を巡っています。 読み取りスレッドは、ソースに項目がなくなったときに実行を終了する必要があります。LinkedBlockingQueueの "escape"要素
"SHUTDOWN"
のようなダミーの値をLinkedBlockingQueue
に入れることを考えました。
読者は、この処理を行います。
while ((data = (String)MyLinkedBlockingQueue.take()).equals("SHUTDOWN") == false) {
//read and live
}
は、すべての文字列に等号を実行することが効率的ですか?代わりに私は何を使うことができますか?
これは、キューをシャットダウンする唯一の方法が 'shutdownQueue()'を呼び出すことであるという副作用があることに注意してください。逆に、文字列リテラル(および/または 'intern()')を使用すると、誰も 'put(" SHUTDOWN ")'を呼び出すことによってキューをシャットダウンすることができます。あなたが望むものは、あなたが意図するセマンティクスに依存します。 –
@DanielPryden - 誰も 'shutdownQueue()'を呼び出してキューをシャットダウンすることができます。この方法では、キュー管理ロジックをうまくカプセル化した状態に保ちます。 – jtahlborn
@jtahlborn、なぜ私は拘束された文字列を使用できないのか説明できますか? – jullin