問題タブ [futuretask]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
servlets - Java HTTPServlet vs スタンドアロン アプリ + いくつかの OutOfMemory の楽しみ
Java 5 を使用して、ファイル システムからいくつかのシリアル化されたオブジェクトを読み込む関数がありますFutureTask
。私のコンピュータのメモリは問題にならないはずです。
メイン メソッド内で関数を呼び出すと、すべて正常に動作しますが、内init()
または内から関数を呼び出すとstatic block
、HTTPServlet
あらゆる種類のOutOfMemoryException
(通常は Java ヒープ スペース) が取得されます...
サーブレットを使用してこの問題が発生する理由を知っている人はいますか? FutureTasks と Servlets が競合する可能性はありますか? また、問題を理解/修正するにはどうすればよいですか?
java - FutureTask、安全でないアクション
コードをコンパイルしているときに (-Xlint オプションを使用)、次の警告が表示されます。
警告を生成する行:
Return クラスは Callable を実装します。
警告を修正するにはどうすればよいですか?
java - FutureTask と Callable の使用法
FutureTask と呼び出し可能な calsses を使用することを考えている実装機能があります。これを使用できるかどうか、およびそのような状況でこれらのクラスを使用することが正しいかどうかを確認したいだけです。ここにあります:私はStruts spring hibernateを使用してWebアプリケーションに取り組んでいます。約 40 列/フィールドと約 1000 行を含むタイプのファイルをアップロードする必要があります。各行とその行の各フィールドを処理する必要があります。これには、次のサブタスクが含まれます。
- セル/フィールドからデータを取得する
- maxlength 、required などのデータの検証。
- 特定の基準を満たさない行を破棄します。
- 行ごとに VO を作成し、VO にデータを入力する
- VOを保存します。
そこで、各行の処理にfuture taskを使ってマルチスレッド化しようと考えていました。私が直面している問題は、最終結果で応答を送信したいので、すべてのタスクが完了するまで待つ方法です。実際の応答時間ではなく、処理を高速化したいだけです。
java - Executor に送信された FutureTask が実行されない
メソッド runReport() から結果を返す、AsyncTask から呼び出される一連のインスタンスのクラスを作成しました。ワーカー スレッドは正常に作成されますが、何らかの理由で Callable の call() メソッドが実行されません。私は何を間違っていますか?
私が知る限り、これは独自の Thread で FutureTask として実行する必要があります。これは、次のことを行う必要があるためです (戻り値以外はすべて doStuff() 内にあります)。
- いくつかの同期セットアップを実行します (AsyncTask はそれを UI スレッドから切り離します)。
- Looper.prepare() を呼び出す
- リスナーを登録する
- Looper.loop() を呼び出し、一定期間にわたってリスナーからいくつかのコールバックをキャッチします。
- 十分なデータポイントがある場合、リスナーのコールバック内で Looper.myLooper().quit() を呼び出します
- 結果を返す
私はこれを行うためのより良い方法を受け入れています。最初は AsyncTask にこの呼び出しを行わせてから、そのスレッドで Looper.loop() を実行しましたが、結果を返す前にリスナーから Looper.myLooper.quit() を呼び出す必要があったため、これらのオブジェクトのキューを処理できませんでした。 、スレッドのメッセージ キューを不可逆的に汚染しました。
javascript - 数日または数か月先の手術の実施
将来的には、ユーザーにメールを送信するなど、タスクを実行するための最良の方法を見つけようとしています。
私の考えは、メールを送信する必要があるときに(ユーザーデータと一緒にデータベースに)保存し、ユーザーがメールを送信する必要があるかどうかを毎日確認し、Meteorのタイマー機能を使用することです。
私が見ている問題は、設定されているタイマーが多すぎて、パフォーマンスが低下していることです。良い解決策は何ですか?
編集:基本的に、私のユースケースには、ユーザーがイベントを作成し、それを長期イベントまたは短期(日、週、または月に基づく)として設定し、期間に応じてそのイベントのフォローアップを受け取ることが含まれます。
1時間ごとにチェックできると思いますが、それは同じコストの問題のようです。これを行うためのMeteor固有の方法はありますか?それとももっと良いコンセプトですか?
Edit2:わかりました。問題にとって精度はそれほど重要ではないことに気付いたので、タイムゾーンごとに1つのタイマーを設定して、大量のメールを送信することを考えています。ユーザーに長期的なイベントがあり、そのリマインダーが今週である場合は、今すぐ送信してください。基本的には、イベントの期間とユーザーのタイムゾーンによって異なります。
だから私の更新された質問は、私の問題を念頭に置いて、毎日何かを実行するにはどうすればよいですか?
java - Future.get(timeout) を使用した基になるスレッドの動作
Future
タスクを完了するためにタイムアウトを使用しています。TimeOutException
制限時間を超えると取得します。の振る舞いから、thread dump
根底にある糸が続いていることが分かります。
そうですか?ローミングする複数のスレッドをどのように処理しますか? プールから削除されたスレッドに対してnoIOException
がスローされた場合はどうなりますか?
これが本当なら、基にkill
なるスレッドへの道は何ですか。IO
私の場合、外部を待ち続けます。
スレッドダンプの一部:
(ループ内の任意のタスクで) TimeOutException が発生すると、次のようにタスクをキャンセルします。
それは問題を解決するべきではありませんか?
ご意見をお聞かせください。
前もって感謝します。
listener - すべての「FutureTask」が計算を終了した後で、別のメソッドを呼び出すにはどうすればよいですか?
異なる PaaS でアプリケーションを作成してデプロイする次の方法があります。
FutureTask
すべての計算が終了したら、どうすれば別のメソッドを呼び出すことができますか? Command
私はパターンについて読んだことがListener
ありますが、これらが正しいものであるかどうか、この場合にそれらを実装する方法がわかりません。
java - 設計上の問題: これは生産者/消費者でのみ実行可能ですか?
lucene ファイルのインデックス作成のパフォーマンスを向上させようとしています。このために、ジョブを実行するワーカー「LuceneWorker」を作成しました。
以下のコードでは、「同時」実行が大幅に遅くなります。私はその理由を知っていると思います.LuceneWorkerのさらに別のタスクを実行するためのメモリがほとんどないのは、先物が限界に達したためです.
Q: エグゼキューターに入る「ワーカー」の量を制限する方法はありますか? 言い換えれば、「n」個の先物がある場合 - 続行せず、最初にドキュメントのインデックス作成を許可しますか?
私の直感的なアプローチは、ArrayBlockingQueue を使用してコンシューマー/プロデューサーを構築することです。しかし、私はそれを再設計する前に正しいのだろうか.
java - FutureTaskを適切に拡張する方法
計算量の多いアプリケーションをコーディングしているときに、SwingWorkerクラスを利用して負荷を複数のCPUコアに分散させようとしました。ただし、このクラスの動作はやや奇妙であることが判明しました。1つのコアのみが使用されているように見えました。
インターネットを検索したところ、このWebで優れた回答が見つかりました(Swingworkerインスタンスが同時に実行されていない、user268396による回答を参照)。これは、問題の原因に加えて、考えられる解決策についても言及しています。
これを回避するためにできることは、ExecutorServiceを使用して、FutureTasksを投稿することです。これらはSwingWorkerAPIの99%を提供します(SwingWorkerはFutureTaskの派生物です)。あなたがしなければならないのは、Executorを適切にセットアップすることだけです。
Javaの初心者なので、これを適切に行う方法が完全にはわかりません。いくつかの初期データをFutureTaskオブジェクトに渡す必要があるだけでなく、SwingWorkerの場合と同様に結果を取得する必要もあります。したがって、サンプルコードをいただければ幸いです。
nvx
====================編集====================
Callableを実装するFutureTaskで説明したシンプルでありながら洗練されたソリューションを実装した後、別の問題が発生しました。を使用ExecutorService
して個々のスレッドを作成する場合、スレッドの実行が終了した後に特定のコードを実行するにはどうすればよいですか?
オブジェクトのdone()をオーバーライドしようとしましたがFutureTask
(以下のコードを参照)、「結果の表示」ビット(またはそのことに関するGUI関連のもの)は、アプリケーションのイベントディスパッチスレッド(EDT)で実行する必要があると思います。したがって、ランナブルをEDTに送信するにはどうすればよいですか?
java - 非同期手続きに FutureTask を使用する際の問題
私の Java Web アプリには、約 200 通のメールを送信するメソッドがあります。メール サーバーの遅延のため、プロセス全体に約 7 分かかります。この一括メール送信は、ユーザー アクションの結果として発生する必要があります。もちろん、ユーザーが次に転送されるまでそれほど長く待つ必要はありません。とにかくApacheがタイムアウトすることは言うまでもありません。そのため、FutureTaskを実装して、処理中にプロセスを別のスレッドで実行しようとしています残りのコードは次のようになります。
ただし、アプリは FutureTask が完了するのを待ってから続行します。これは、スクリプトの残りの部分を続行しながら、サイドで別のスレッドでコードを実行する最良の方法ではないという考えにオープンです。より良い方法はありますか/これを機能させるにはどうすればよいですか?