私は2つのスレッドを持っています。1つは顧客で、もう1つは生産者です。
READという顧客の関数を呼び出したい。これは、プロデューサーがデータを配置するまで無期限にブロックする必要があります。
どうすればいいですか?ありがとう !
私は2つのスレッドを持っています。1つは顧客で、もう1つは生産者です。
READという顧客の関数を呼び出したい。これは、プロデューサーがデータを配置するまで無期限にブロックする必要があります。
どうすればいいですか?ありがとう !
を使用することをお勧めしますLinkedBlockingQueue
。これは、「プロデューサー-消費」問題をシミュレートする最も簡単な方法です。一方のスレッドはメソッドを使用して値をキューに入れput
、もう一方のスレッドはブロッキングを使用してデータを消費しますtake
(スレッドはキューが空でなくなるまで待機します)。LinkedBlockingQueue
メソッドを同期する必要がないため、使用は非常に簡単です。すべてがすでに完了しています。
キューに入れるデータに同期が必要な場合、つまりプロデューサが 1 つのオブジェクトを生成し、それをキューに格納します。コンシューマは、プロデューサによって配置されたオブジェクトを消費する必要があります。SynchronousQueue または new TransferQueue を使用することをお勧めします。
を使用thread.wait()
してからthread.notify()
。thread.wait()
起こるまで待ちますthread.notify()
。