2

私のアプローチが正しいかどうかわからないので、できるだけ問題を説明するために最善を尽くします。

サーバーに接続するクライアントをプログラミングしています。いくつかの(異なる)リクエストを頻繁に送信します。リクエストが多すぎて、再ログインを余儀なくされる場合があります。ログインは、リクエスト ヘッダーに設定されたトークンによって検証されます。

ロック/待機オブジェクトのようなものを実装したいと思います。ほとんどのリクエストは別々のスレッドで実行されますが、同じ関数を介して (最終) リクエストを送信します。この関数では、応答の有効性を確認し、サーバーが私をキックすることを決定した場合は、再ログイン要求を送信します。

私の問題: 無効な応答がある場合、非同期で再ログインし (応答の JavaFX コールバック)、続行します。マルチスレッド タスクが原因で、2 つ (またはそれ以上) のリクエストが同じ無効な応答を取得して再ログインを試みるか、別のタスクがログイン中に別のタスクがリクエストを実行しようとする (有効なトークンがない) という状況が発生する可能性があります。無効な応答を受信した場合、他の 1 つが有効なログインを受信して​​いる間にログインを開始した場合、その 1 つが新しいログイン中に無効化された場合などです。

別のタスクから要求されたログインが完了するまでタスクを強制的に待機させるにはどうすればよいですか? そのための最良のアプローチは何でしょうか?

ありがとうございます。

4

2 に答える 2

1

これは、共有リソースにアクセスする場合のようです。ロック/待機に関するあなたの直感は正しいです。同期された方法は、あなたにとって良い解決策のようです。そうでない場合は、Semaphoreを使用します。

于 2013-10-15T13:12:11.770 に答える