問題タブ [executor]

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.

0 投票する
11 に答える
150197 参照

java - Javaエグゼキュータ:タスクが完了したときに、ブロックせずに通知を受ける方法は?

エグゼキュータサービスに送信する必要のあるタスクでいっぱいのキューがあるとします。一度に1つずつ処理してほしい。私が考えることができる最も簡単な方法は次のとおりです。

  1. キューからタスクを取得します
  2. エグゼキュータに送信します
  3. 返されたFutureで.getを呼び出し、結果が利用可能になるまでブロックします
  4. キューから別のタスクを取得します...

ただし、完全にブロックしないようにしています。タスクを一度に1つずつ処理する必要がある、そのようなキューが10,000ある場合、それらのほとんどがブロックされたスレッドを保持するため、スタックスペースが不足します。

私が欲しいのは、タスクを送信し、タスクが完了したときに呼び出されるコールバックを提供することです。そのコールバック通知をフラグとして使用して、次のタスクを送信します。(functionaljavaとjetlangは明らかにそのような非ブロッキングアルゴリズムを使用していますが、私はそれらのコードを理解できません)

独自のエグゼキュータサービスを作成する以外に、JDKのjava.util.concurrentを使用してこれを行うにはどうすればよいですか?

(これらのタスクを提供するキュー自体がブロックされる可能性がありますが、それは後で取り組むべき問題です)

0 投票する
1 に答える
91699 参照

java - TaskExecutorの例を使用した優れたSpringスレッドはありますか?

トランザクション管理にSpringを使用するJavaアプリケーションでスレッド化を実装する方法を理解しようとしています。SpringのドキュメントでTaskExecutorセクションを見つけましたが、ThreadPoolTask​​Executorは私のニーズに合うように見えます。

ThreadPoolTask​​Executor

この実装は、Java 5環境でのみ使用できますが、その環境で最も一般的に使用される実装でもあります。java.util.concurrent.ThreadPoolExecutorを構成するためのBeanプロパティを公開し、それをTaskExecutorでラップします。ScheduledThreadPoolExecutorなどの高度なものが必要な場合は、代わりにConcurrentTaskExecutorを使用することをお勧めします。

しかし、どうやって使うのかわかりません。私はしばらくの間良い例を探していましたが、運がありませんでした。誰かが私を助けることができれば私はそれをいただければ幸いです。

0 投票する
1 に答える
1484 参照

java - ThreadPool は、Polling のように Executor に対してですか?

Java の Executor は (私が理解している限り) ThreadPool の概念を抽象化したものであり、タスクを受け入れて実行 (実行) できるものです。

ポーリングの概念について同様の例外を探しています。特定の Queue (これは を実装していません BlockingQueue) からアイテムを継続的にポーリング (デキュー) し、それらを実行してスリープ状態にし、シャットダウンするまでこれをすべて繰り返す必要があります。

既製の抽象化はありますか、それとも自分で何かを書く必要がありますか?

(より良いタイトルの提案は大歓迎です)

0 投票する
7 に答える
28290 参照

java - いつJavaのThreadoverExecutorを使用する必要がありますか?

エグゼキュータはクリーンな抽象化のようです。より堅牢なエグゼキュータに依存するのではなく、スレッドを直接使用したいのはいつですか?

0 投票する
3 に答える
12506 参照

java - Java のエグゼキュータとデーモン

アプリがサーバーを介して読み込まれるときにインスタンス化する MyThread オブジェクトがあり、それをデーモン スレッドとしてマークしてから呼び出しますstart()。スレッドは、アプリケーションがアクティブである限り、キューからの情報を待ちます。私の問題/質問は次のとおりです。現在、MyThread は Thread を Daemon としてマークしているため、Thread を拡張しています。だから私が尋ねたかったのは、MyThread が Thread を拡張する代わりに Runnable を実装するかどうか (そしてもちろん名前が変更されるかどうか) でありnewSingleThreadScheduledExecutor()、どのように、何を、またはどこで、何かを Daemon としてマークするかを使用します。マルチスレッド環境のいくつかの部分は私にとって非常に新しいものであるため、用語を混乱させていないことを願っています。

ありがとう

更新: 私のアプリで参照しているモジュールは、実際にはこの種のスレッドがいくつかある Web アプリであり、それらに共通しているのは、ServletContextさまざまな理由ですべてがメンバーとして含まれていることです。現在、私はこれを memebr として拡張ThreadWebThreadており、ServletContextすべてのサブクラスがこれを利用できます。Executor と ThreadFactory を使用して Runnable パラダイムに切り替える場合、基本的には、WebRunnable実装RunnableとをServletContextパブリック メンバーとして持つ醜いハイブリッドが必要であり、ThreadFactory実装newThread(WebRunnable arg0)に加えて実装が必要newThread(Runnable arg0)です。何が一番いいのかわからない。ありがとう

0 投票する
1 に答える
906 参照

java - Java Scheduled Executor:タスクがまだ終了していない場合、並行して実行されないことを保証しますか?

java.util.concurrent パッケージの次の Java メソッドがScheduledExecutorService.html#scheduleAtFixedRate()

「最後の」実行からの実行可能ファイルがまだ終了していない場合に、スケジュールされた実行可能ファイルが並行して実行されないことを絶対に保証します。

たとえば(疑似コード)

どうもありがとうジャン

0 投票する
4 に答える
17250 参照

java - Javaでスケジュールされたエグゼキュータで未処理の例外

私は次の問題を抱えています、そして私は正確に何が起こるか知りたいです。私はJavaのScheduledExecutorServiceを使用して、5分ごとにタスクを実行しています。それは非常にうまく機能します。エグゼキュータは、Javaでのスレッドプログラミングの方法を完全に変えました。

ここで、Java Docを参照して、スケジュールされたタスクが未処理の例外で失敗した場合の動作について説明しましたが、何も見つかりませんでした。

次のスケジュールされたタスクはまだ実行されますか?未処理の例外がある場合、スケジュールされたエグゼキュータはタスクのスケジュールを停止しますか?誰かがこの単純な問題に関する情報を指摘できますか?

どうもありがとう。

0 投票する
10 に答える
25498 参照

java - ThreadPoolExecutorのキューに入れられたすべてのタスクを削除する

ThreadPoolExecutorについてこのかなり単純な質問があります。次の状況があります。キューからオブジェクトを消費し、それらに適切なワーカータスクを作成して、ThreadPoolExecutorに送信する必要があります。これは非常に簡単です。ただし、シャットダウンシナリオ内では、多くのワーカーが実行キューに入れられる場合があります。これらのタスクの1つが1時間実行されている可能性があり、アプリケーションを比較的高速で正常にシャットダウンする必要があるため、既に処理中のタスクを正常に完了する必要があるときに、キューに入れられたすべてのタスクをThreadPoolExecutorから破棄します。

ThreadPoolExecutorのドキュメントにはremove()メソッドがありますが、削除できるのは特定のタスクのみです。パージ()は、すでにキャンセルされた将来のタスクに対してのみ機能します。私のアイデアは、キューに入れられたすべてのタスクを保持しているキューをクリアすることでした。ThreadPoolExecutorはこの内部キューへのアクセスを提供しますが、ドキュメントには次のように記載されています。

getQueue()メソッドを使用すると、監視とデバッグを目的としたワークキューへのアクセスが可能になります。この方法を他の目的に使用することは強くお勧めしません。

したがって、このキューを取得してクリアすることはできません。また、このドキュメントの抜粋には次のように書かれています。

提供されている2つのメソッド、remove(java.lang.Runnable)とpurge()を使用して、キューに入れられた多数のタスクがキャンセルされた場合のストレージの再利用を支援します。

どのように?確かに、エグゼキュータに送信したすべてのタスクのリストを維持できます。シャットダウンの場合は、すべてのエントリを繰り返し処理し、remove()メソッドを使用してThreadPoolExecutorから削除します...しかし...さあ、これはこのリストを維持するためのメモリの浪費と面倒。(たとえば、すでに実行されたタスクを削除する)

ヒントや解決策に感謝します!

0 投票する
5 に答える
20709 参照

java - Executors から RuntimeExceptions を適切にキャッチする方法は?

次のコードがあるとします。

myRunnableがをスローした場合、どうすればRuntimeExcpetionそれをキャッチできますか? 1 つの方法は、独自のThreadFactory実装を提供し、そこから出てくる s のnewSingleThreadExecutor()カスタムuncaughtExceptionHandlers を設定することです。Threadもう 1 つの方法は、try-catch ブロックを含むmyRunnableローカル (匿名) にラップすることです。Runnable他にも同様の回避策があるかもしれません。でも…なんだか汚い感じがして、こんなに複雑にならないように感じます。きれいな解決策はありますか?

0 投票する
4 に答える
10731 参照

java - エグゼキュータのすべてのスレッドが終了するのを待ちますか?

私はプログラミングの練習としてparellelクイックソートを実装しています。終了後、ExecutorsのJavaチュートリアルページを読みました。これにより、コードがさらに高速化されるようです。残念ながら、すべてがソートされるまでプログラムが続行されないようにするために、join()に依存していました。現在、私は以下を使用しています:

これは問題なく機能しているようですが、非再帰的なquicksort()メソッドを呼び出した直後にe.shutdown()を実行すると、RejectedExecutionExceptionsが多数あるため、これは期待どおりに機能していないと思います。

とにかく、私は基本的にleftThread.join()と同じ機能を取得しようとしていますが、Executorを使用しています。私の質問は、

すべてのスレッドが完了するまで待つのに最適な方法ですか?

編集:わかりました。Executorをシャットダウンした後に大量のエラーが発生した理由を理解しました。これは、この関数をループで呼び出していて(実行時間を均等にするため)、新しいExecutorを作成していなかったためです。