生産者と消費者の問題は、スレッドモデルの古典的な問題である:
生産者と消費者は、同期間中に同じメモリ空間、収納スペースから削除収納スペース製品、消費者製品に追加プロデューサーを共有しています。
収納スペースが空で、消費者の閉塞、ストレージ容量がいっぱいになると、プロデューサーはブロックされました。
実施(一部)は次のとおりです。
1.待ち()メソッド、および通知()メソッドの実装。これは最も単純で最も基本的な実装である、バッファが満杯と空のバッファが消費者支出は、すべてのスレッドを起動します後生産者が製品または製品を生産する際に、待つ待機()メソッドを呼び出しているです。
2. ReentrantLockのリエントラントのロックが実現しました。また、再帰的ロックとして知られているリエントラントロック、ロックを取得するために外側の関数の後に同一のスレッドを参照して、内側の再帰関数は依然としてロックコードを取得しなければならないが、ロックおよびアクセスを維持する、簡単な言葉で、影響を受けませんもう一度、スレッドロックロックを持っている場合、ロック関連のカウンタは、取得カウンタは、その後、実際のリリースを取得するために二度解放されるようにロックし、関数呼び出しカウンタデクリメントの終わりにインクリメントされます。すでに他の同期ブロックにロック・スレッドを取得し、それはブロックされません同じロックが必要です。
キューの実装を遮断3. BlockingQueueの。キューをブロックしているBlockingQueueのは、それは言葉のブロックから見て、いくつかのケースでブロッキングを起こしてキューへのアクセスをブロックすることができます。例がありますが、主要な次の二つのブロックされました:
キューに搬入する際、キューが満杯である3.1。
3.2 ..場合は、空のキュー操作のためのキュー時間
そのため、スレッドはキューをブロックに満ちているとき、他のスレッドがある場合を除き、エンキュー操作は、チーム作業だった、ブロックされます。スレッドが空のキューのデキュー操作でブロックされたときにいない限り、ブロックされます別のスレッドのエンキュー操作がありました。そのため、キューを遮断することは、スレッドセーフです。