0

doPostonメソッドがいくつかのアクションを実行するサーブレットがあるとします。また、サーブレットへのリクエストごとにプールから取得されるWebサービスへのプールConnections(接続としましょうN)があります(リクエストごとに1つの接続)。サーブレットのメソッドでは、プールから接続を取得し、それdoPostを使用して(この操作は長すぎる可能性があります)、プールに戻します。

Nサーブレットへの接続が同時に行われると仮定すると、接続はNプールから取得されます。そして、そのリクエストが処理され、N+1リクエストN+2が到着している間、それらは何らかの接続の解放が発生するまで待機します(私のプールはによってバックアップされていますBlockingQueue)。

N+1リクエストがリクエストよりも早く利用可能な接続を所有することを保証したいと思いますN+2

どうすればこれを達成できますか?

4

1 に答える 1

1

ArrayBlockingQueueキューの公平性を制御するコンストラクター引数を提供します。に設定するとtrue、スレッドがキューの要素を呼び出したときと同じ順序で取得することが保証されtake()ます。

私が理解している限りでは、プールのバッキングキューとしてArrayBlockingQueuewithを使用fair = trueするだけで十分です。

于 2012-10-08T11:13:06.880 に答える