プロデューサは、コンシューマ向けにFutureのままにすることができます。次に、プロデューサはFuture
のget()
メソッドを呼び出し、プロデューサスレッドを消費者が終了するまで停止させます。このソリューションは、野生の中で行われる方法なので、現代的なものです。同じことはCountDownLatchを使用して行うことができます。ラッチと将来との違いは、プロデューサがFuture
オブジェクトの所有者が必要とするオブジェクトを生成する必要がある場合にFutureが使用されることです。 CountDownLatch
は、主に複数のスレッドの同期に使用されます。この例ではFuture
かCountDOwnLatch
作業が問題にいくつかの変更が必要になり、例えばLinkedList
がちょうどInteger
以上に合格する必要がありますようにする
けれども。簡単な解決方法は、LinkedList
をSynchronousQueueに置き換えることです。 A SynchronousQueue
にはゼロ要素が含まれているため、アイテムがキューに挿入されると、キューはコンシューマが来てアイテムを取得するまでブロックされます。オブジェクトをSynchronousQueue
に追加しようとすると、そのアイテムが消費されるまでブロックされます。プロデューサは、プロデューサが前のキューで終了する前にキューにenxtアイテムを配置しようと試みることができますが、消費者が来てそれを取得するためにそこで再び待機します。
私はこれがまさにそのようなエクササイズで望むことができるものだと思います –