私はHTTPリクエストを処理するREST Webサービスを持っています。データがデータベースからフェッチされた後、バックグラウンドスレッドを実行してデータの分析を開始します。これには、完了に時間がかかります。このデータはレスポンスとは何の関係もなく、計算された分析を記録するだけです。非同期スレッドでバックグラウンド計算を実行する方法(REST Webサービスで)
私はスレッドの概念を自分で理解して、以下の方法を試しました。しかし、どちらの場合も、バックグラウンド計算が終了した直後にHTTPレスポンスが返されるため、計算スレッドと元のスレッドは非同期ではなく、計算スレッドは解析が完了するまで応答スレッドを停止します。
デーモンスレッドを開始しました。デーモンスレッドがバックグラウンドで実行されると予想しましたが、HTTPメソッドは応答を送信します。しかし、真実ではありません。応答は、このスレッドで計算が完了した後でのみ表示されます。親スレッドが終了してもデーモンスレッドはバックグラウンドで実行されませんか?計算スレッド私は親スレッド内で作成された子スレッドです:
Callable<Boolean> computeCallable = new CallableComputeProcess();
Thread t=new Thread(computeCallable);
t.setDaemon(true);
t.start();
P.Sは(デーモンを起動すると、ここで問題となっていたかもしれない方法を知って、ジェームズのコメントを読んでください)。
スレッドを非同期で開始する方法はありますか?バックグラウンド計算をHTTPレスポンスを停止せずにバックグラウンドで実行できるようにする方法はありますか?
私はFutureTaskのコンセプトとExecutorServiceのを使用し、私は()メソッドを取得する呼び出すことはありませんれている:自分の質問に答える
再、 "私は、にデーモンスレッドを期待...しかし..." あなたは誰かがしたい場合はあなたのコードが何をしたのかを説明してください。そして、あなたはコードを見せなければなりません。 –
確かに@jameslarge。コードの追加 – kai
Re、 "デーモンスレッドを開始しました。"それが 't.setDaemon()'と呼ばれた場合、おそらくそれは悪い考えです。 Javaの用語では、「デーモン」スレッドは、プログラム内で実行されている他の非デーモンスレッドがない場合に自動的に強制終了されるスレッドです。あなたはおそらく、有用な計算をしながら自動的に殺されるスレッドをwan'tしないでしょう。スレッドの唯一の目的が何らかのサービスを他のスレッドに提供することであるならば 'setDaemon()'を呼び出すべきです。 –