Java:プロデューサーコンシューマーの例–同時読み取り/書き込みの処理

公開: 2019-02-17

プロデューサーコンシューマーの例-同時読み取り:書き込みの処理

producer-consumer problembounded-buffer problemも呼ばれます)は、マルチプロセス同期問題の典型的なJavaの例です。

この問題は、キューとして使用される共通の固定サイズのバッファーを共有する2つのプロセス( the producerthe consumer )について説明しています。 プロデューサーの仕事は、データの一部を生成し、それをバッファーに入れて、再開することです。

同時に、コンシューマーは一度に1つずつデータを消費します(つまり、データをバッファーから削除します)。 問題は、データがいっぱいになった場合にプロデューサーがバッファーにデータを追加しようとしないこと、およびコンシューマーが空のバッファーからデータを削除しようとしないことを確認することです。

以下の単純なJavaプログラムは、この問題を引き起こします。

Javaの例–生産者/消費者問題

問題:

解像度:

synchronizedされたキーワードを追加して、使用中にdataをロックします。

より良いJavaプログラム:

Javaプロデューサーコンシューマーの例の結果:

java-producer-consumer-tutorial-crunchify