Item オブジェクトをキューに追加および削除するコンシューマーとプロデューサーがあります。put()
およびtake()
メソッドを使用する場合。まだカバーする必要があるスレッドの安全性の問題はありますか? これはバウンド バッファの問題に似ており、代わりにブロッキング キューを使用することでセマフォやモニタの必要性が置き換えられるのではないかと考えていました。Item オブジェクト自体はおそらく同期が必要です (セッターですが、ゲッターはロックを必要としません)。そして最後に、実行の順序が過小であるため、両方のスレッドに同時に呼び出すことはできないため、スレッドセーフであるかどうかをテストする方法がよくわかりませんtake()
。何か案は?ありがとう。
5899 次
2 に答える
7
それはあなたがしていることに対して完全にスレッドセーフです、実際これはそれが設計されているものです。BlockingQueue
(によって実装されるインターフェースである)の説明は次のようにLinkedBlockingQueue
述べています。
BlockingQueueの実装はスレッドセーフです。すべてのキューイングメソッドは、内部ロックまたは他の形式の同時実行制御を使用して、アトミックにその効果を実現します。
于 2012-09-26T06:59:17.710 に答える