問題タブ [executorservice]
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.
java - 500 ワーカー スレッド、どのような種類のスレッド プール?
これがこれを行うための最良の方法かどうか疑問に思っています。無期限に実行される約 500 のスレッドがありますが、1 サイクルの処理が完了すると Thread.sleep が 1 分間発生します。
実行中のコードは非常に単純で、基本的にはこれだけです
実行中のタスクごとに個別のスレッドが必要なので、アーキテクチャを変更することはできません。threadPool のサイズを Runtime.getRuntime().availableProcessors() に等しくしようとしましたが、これは 500 個のスレッドすべてを実行しようとしましたが、そのうちの 8 個 (4xhyperthreading) しか実行できませんでした。他のスレッドは降伏せず、他のスレッドに順番を任せます。私はwait()とnotify()を入れてみましたが、まだうまくいきません。誰かが簡単な例やヒントを持っていれば、私は感謝しています!
うーん、デザインに欠陥があるのは間違いない。スレッドは、学習アルゴリズムの一種である遺伝的プログラミングまたは GP を実装します。各スレッドは、高度な傾向を分析して予測を行います。スレッドが完了すると、学習は失われます。そうは言っても、sleep() を使用すると、1 つのスレッドが「学習」していないときにリソースの一部を共有できるようになることを望んでいました。
したがって、実際の要件は
状態を維持して 2 分ごとに実行するタスクをスケジュールし、同時に実行するタスクの数を制御するにはどうすればよいですか。
java - thread.start()とexecutor.submit(thread)の違い
スレッドに関する問題に直面しています。runnableを実装するクラスがあり、そのクラスでthread.start()メソッドを使用できます。私の質問はjava.util.concurrent.ExecutorService
、executor.submit(thread)を呼び出すことができるクラスがもう1つあるということです。
thread.start()
との違いは何executor.submit(thread)
ですか...
java - executorserviceがshutdown()の場合、実行中/ブロックされたランナブルはどうなりますか
今日、スレッドパターンについて質問を投稿しましたが、ほとんどの人がExecutorServiceを調べることを提案しました。
ExecutorServiceを調べていたところ、何かが足りないと思います。サービスに実行中またはブロックされたスレッドがあり、誰かがExecutorService.shutdown()を呼び出した場合はどうなりますか。実行中またはブロックされているスレッドはどうなりますか?
ExecutorServiceは、それらのスレッドが完了するのを待ってから終了しますか?
私がこれを尋ねる理由は、私がJavaに手を出したとき、Thread.stop()が非推奨になったためです。スレッドを停止する正しい方法は、必要に応じてsempahoresを使用してThreadを拡張することでした。
ExecutorServiceは実行中のスレッドをどのように処理しますか?
java - 中断されないスレッドを停止します
ObjectInputStreamからオブジェクトを配置して読み取るスレッドがあります。
readObjectはInterruptedExceptionをスローしません。私が知る限り、このスレッドが中断されても例外はスローされません。このスレッドを停止するにはどうすればよいですか?
java - ScheduledExecutorService を使用してタイマーを開始および停止する
私の読書から、ScheduledExecutorService は、Java でタイマーを開始および停止する正しい方法のようです。
タイマーを開始および停止するコードを移植する必要があります。これは定期的なタイマーではありません。このコードは、タイマーを開始する前に停止します。したがって、事実上すべての開始は実際には restart() です。ScheduledExecutorService を使用してこれを行う正しい方法を探しています。これが私が思いついたものです。私が見逃していることについてのコメントと洞察を探しています:
ティア、ルーブル
java - 呼び出し可能なスレッドに名前を付ける方法は?
ExecutorServiceスレッドプールを使用してCallableObjectを実行しています。このスレッドに名前を付けたいと思います。
より具体的には、古いバージョンではこれを行いました-
log4jロギングでスレッド名を使用しています。これは、トラブルシューティング時に非常に役立ちます。現在、コードをJava1.4からJava1.6に移行しています。私はこれを書きました(以下に与えられます)-しかし、私はこのスレッドに名前を付ける方法を知りません。
このスレッドに名前を付けるためのアイデアを教えてください。
java - ExecutorService、すべてのタスクが完了するのを待つ方法
のすべてのタスクが完了するのを待つ最も簡単な方法は何ExecutorService
ですか? 私のタスクは主に計算なので、各コアで 1 つずつ、多数のジョブを実行したいだけです。現在、私のセットアップは次のようになっています。
ComputeDTask
実行可能を実装します。これにより、タスクが正しく実行されているように見えますが、コードは でクラッシュwait()
しIllegalMonitorStateException
ます。おもちゃの例をいくつか試してみたところ、うまくいくように見えたので、これは奇妙です。
uniquePhrases
数万の要素が含まれています。別の方法を使用する必要がありますか? できるだけシンプルなものを探しています
java - スレッドプールからスレッドIDを取得するにはどうすればよいですか?
タスクを送信する固定スレッドプールがあります(5スレッドに制限されています)。これらの5つのスレッドのどれが私のタスクを実行しているかをどのように見つけることができますか(「 5のスレッド#3がこのタスクを実行している」など)?
java - キューがいっぱいになると ThreadPoolExecutor がブロックされますか?
ThreadPoolExecutor を使用して多くのタスクを実行しようとしています。以下は架空の例です。
java.util.concurrent.RejectedExecutionException
問題は、タスクの数が作業キューのサイズを超えているため、すぐに取得できることです。ただし、私が探している望ましい動作は、キューに空きができるまでメイン スレッドをブロックすることです。これを達成するための最良の方法は何ですか?
java - FutureTaskで例外をキャッチする方法
Java 1.6(およびEclipseから)でFutureTask
実行するとメソッドの例外が飲み込まれることがわかった後、すべての実装にthrow/catchを追加せずにこれらをキャッチする方法を考え出そうとしました。Executors.newCachedThreadPool()
Runnable.run()
Runnable
FutureTask.setException()
APIは、オーバーライドがこれに役立つはずであることを示唆しています。
このFutureがすでに設定されているかキャンセルされていない限り、このFutureは、指定されたthrowableを原因としてExecutionExceptionを報告します。このメソッドは、計算が失敗したときにrunメソッドによって内部的に呼び出されます。
ただし、このメソッドは呼び出されていないようです(デバッガーで実行すると、例外がによってキャッチされますが、FutureTask
呼び出さsetException
れません)。問題を再現するために、次のプログラムを作成しました。
私の主な質問は、FutureTaskでスローされた例外をキャッチするにはどうすればよいですか?なぜsetException
呼ばれないのですか?
Thread.UncaughtExceptionHandler
また、なぜこのメカニズムが使用されていないのか知りたいのFutureTask
ですが、理由はありますか?