生産者と消費者の3つのメソッドを達成するためのJava

モデルの場合には、設計と実装、我々は以下の3つの質問に注意を払う必要があります。

場合取らを添加容器の同期および製品を取るために製品を追加する、即ち、任意の時間は、相互に排他的であり、撮影した各時間は、相互に排他的な操作(追加操作も同様である)です。

方法1:
使用待ち()と(通知)コンテナが一杯になった場合、生産者はコンテナが満杯でなくなるまで、一時的に生産を停止する必要があり、容器が空になったときに、消費者は、容器が空にされなくなるまで、一時的に支出を停止する必要があるが、バッファ生産者が消費者支出は、すべてのスレッドを覚ますだろうという製品または製品を生産するまで、フルと空の呼び出し待ち()メソッドを待っていました。

方法2:
のawait()と信号()メソッド、すなわちスレッドロック方法。
リエントラントロック(ReentrantLockのうち)を実現することができます。
リエントラントロックは、また、外側の層は、ロックコードを取得する内層依然として再帰関数のロック機能を取得するために同一のスレッドを参照した後、再帰的ロックとして知られているが、影響を受けません。
ロックはロックのニーズに二回、再びスレッドロックは、取得カウンタがインクリメントされ、関数呼び出しカウンタの終わりは1だけデクリメントされて、としている場合は簡単に言えば、ロックが解除されるように、アクセスロックカウンタに関連し、この1を維持します本当のリリースを取得します。
すでに他の同期ブロックにロック・スレッドを取得し、それはブロックされません同じロックが必要です。

方法3:
キュー(BlockingQueueの)ブロックを達成します。
:主な条件は次の二つのブロックされ
たキューに搬入する際、キューがいっぱいの場合1.
2.空のキュー操作のためのキュー時間を

スレッドはキューをブロックいっぱいになると、別のスレッドがある場合を除き、エンキュー操作は、ブロックされるスレッドがそうしない限り、空のキューのデキュー操作は、ブロックされる上でブロックされたときに、チーム作業でした営業チームにスレッド。そのため、キューを遮断することは、スレッドセーフです。

公開された53元の記事 ウォンの賞賛5 ビュー435

おすすめ

転載: blog.csdn.net/qq_45287265/article/details/104991518