1

アプリケーションがWebサービスにデータを送信し、応答を90秒待つ必要があります。しかし、60秒以内に応答がない場合は、ユーザーを別のページにリダイレクトし、応答があった場合はさらに30秒間応答を待ってから、それを処理する必要があります。これにはスレッドを使用する必要があることはわかっていますが、この場合、スレッドがスレッド間でデータを交換できるように、トレッドを統合する方法がわかりません。

何か案は??UIにJSFを使用しています。

要件は次のとおりです。Webサービスは90秒以内に応答を送信します(これが最大応答時間です)。ただし、ユーザーには60秒以内に応答(60秒以内に応答がない場合のダミー応答)が返されます。したがって、ユーザーにダミーの応答が与えられた場合でも(60秒後)、アプリケーションは応答をさらに30秒待機し続けます。

4

1 に答える 1

1

JSFについてはよくわかりませんが、タイマー、おそらくjava.util.Timerが必要なようです。タイマーが切れる前に答えが戻ってきた場合は、タイマーをシャットダウンしてください。タイマーが切れた場合は、30秒間リセットして、ユーザーをリダイレクトします。次回それが消えるときは、正解を待つのをあきらめてください。

あなたはそれだけ理解しているようです。ただし、ここには少なくとも2つの相互作用するスレッドスレッドがあります。コミュニケーションの仕方は?

インスタンスフィールドを使用するだけです。synchronizedそれらへのすべての参照は、メソッドまたはブロックのコードを使用して行う必要があります。そうすれば大丈夫です。あなたはそれを理解する必要がありますが、私はあなたがintを持っていると想像しますtimerPhase、それはタイマーが最初の60秒、次の30秒で開始されなかったか、タイムアウトしたことを示します。また、ブール値answerReceived、答えが含まれているもの、そしておそらく他のいくつかのもの。

(同期が多すぎると、プログラムの速度が低下する可能性が あります。この問題が発生することはないと思います。 ただし、同期ブロックを分割し、相互作用しない限り、各フィールドを個別に同期します。同期を削除して、volatileキーワードを使用します。マルチスレッドについて。(キーワードを読んでくださいvolatile。)並列スレッドがどのように相互作用できるかについて真剣に考えてください。そして、物事が本当に奇妙になる準備をしてください。)

于 2012-04-23T17:07:44.533 に答える