1

非同期ジョブが必要な時間までに結果を処理できない場合があり、データベースでリクエストをチェックして、リクエストがまだ準備中であることを示す何らかのメッセージをクライアントに返す必要があります。 。

リクエストとそれに必要なオブジェクトの作成は1つのデータベーストランザクションで処理され、非同期プロセスは別のトランザクションで処理されます。ScheduledThreadPoolExecutorrunnableインスタンスをexecuteメソッドに渡すことで使用しています。

クライアントがリクエストを行い、ブラウザが非同期ジョブをロードしているときに必要なデータを準備できる場合もありますが、そうでない場合もあります。

だから私の質問は:とにかくデータの準備ができるまで待つように非同期ジョブに指示することができますか?

4

1 に答える 1

1

Runnableインスタンスだけを使用すると、スレッドをしばらくスリープするかループして、どちらも悪い考えである結果を求め続けない限り、プロセスに待機するように指示することはできません。

これを正しく行うには、Callableインスタンスをコンストラクターに渡して、 FutureTaskを使用する必要があります。call()メソッドをオーバーライドすることにより、トランザクションハンドラーにジョブを実行するように指示する必要があります。

また、タスクをキューに追加し、それらのタスクを取得して処理するスレッドプールを作成する、ある種のタスクマネージャーが必要です。キューの目的で、たとえば、FutureTaskの汎用タイプを受け入れるLinkedBlockingDequeを使用することを勧めします。

また、FutureTaskを値として取る名前または何かによってマップされた将来のタスクのマップが必要です。スレッドが指定されたFutureTaskを処理するときに結果を待つという点では、先物マップからすぐに削除する必要があります。次に、クライアントが要求したときに、次のことを確認する必要があります。先物マップにタスクが含まれているかどうか、そこからFutureTaskを取得し、futureTask.get()を呼び出します。これは、タスクが終了するまで待機します。

これは私が行くアプローチです。お役に立てれば。

于 2013-03-01T09:35:49.100 に答える