問題タブ [threadpoolexecutor]

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 投票する
2 に答える
1884 参照

java - Executors.newSingleThreadScheduledExecutor を使用せずに単一スレッドで ScheduledThreadPoolExecutor を作成するにはどうすればよいですか?

ScheduledThreadPoolExecutorを使用せずに単一のスレッドでを作成するにはどうすればよいExecutors.newSingleThreadScheduledExecutorですか?

私がそうしたい理由は、後の呼び出しが のインスタンスではDelegatedScheduledExecutorServiceなく のインスタンスを返すためです。そのため、 etc などThreadPoolExecutorのメソッドを使用できるようにしようとするとgetQueue()失敗します。ThreadPoolExecutor直接作成できる場合は、それが役立ちます。

そして、私がそうしたい理由getQueue()は、エグゼキューターで現在キューに入れられているタスクのサイズを知る方法が他にないからです。

0 投票する
0 に答える
63 参照

java - Runnable から ScheduledJobThreadExecutor.afterExecute に情報を渡す

定期的なタスクをスケジュールし、ScheduledJobThreadExecutor を使用しています。runnable を実行すると、私の反応が必要なことが起こるかもしれませんが、それはタスクが終了した後にのみ発生する必要があります。

最初、私は aftetExecute でこの情報にアクセスできると思っていました。そこに Runnable を取得しているためです (そして、その状態を照会することはできません)。私が提出した元のランナブルではないことが判明しました! しかし、ScheduledFutureTask であり、元の Runnable をアンラップする方法が見つかりません。

私に何ができる?この種の要件のイディオムはありますか?

ありがとうございました!

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

java - ThreadPoolExecutor に処理を進めるかどうかを伝える

特定のポートを介して一連のファイルを複数のコンピューターに送信する必要があります。実際には、ファイルを送信するメソッドが呼び出されるたびに、宛先データ (アドレスとポート) が計算されます。したがって、メソッド呼び出しごとにスレッドを作成するループを使用し、BindException の try-catch ステートメントでメソッド呼び出しを囲み、既に使用されているポートを使用しようとするプログラムの状況を処理します (宛先アドレスが異なると、同じポートを介してメッセージを受信する) スレッドに、数秒待ってから再起動して再試行し、例外がスローされなくなる (配送が正常に実行される) まで試行を続けるように指示します。理由はわかりませんでした (最初に見たときは推測できましたが)、Netbeans は、ループ内で Thread オブジェクトをスリープ状態にすることは最善の選択ではないことを警告しました。これは別のスタックオーバーフローの投稿へのリンクで、とても面白そうでした (私はThreadPoolExecutor クラスについて聞いたことがありませんでした)。プログラムを改善するために、そのリンクと API の両方を読んでいますが、それを自分のプログラムにどのように適用すればよいか、まだよくわかりません。誰でもこれについて手を差し伸べてもらえますか?

編集:重要なコード:

0 投票する
2 に答える
1344 参照

java - 常に一意のIDを取得し、再利用のためにリリースします

問題の説明は次のとおりです。-

各スレッドはunique IDbetween1 and 1000を使用し、プログラムは実行する必要があります。チェックを行っ60 minutes or moreたときに数回run method取得し、そのループの下にブレークポイントを設定しました。理由はわかりません。availableExistingIdsの値は1から1000の範囲であるため、これがどこから来たのかわかりません。id as zero(if(id==0))zero is coming in my id

以下は、プログラムが開始されるメインクラスです-

アップデート:-

ここでArrayBlockingQueueを使用して、使用可能なIDがないときにクラッシュするのではなく、IDが使用可能になるのを待つようにしようと考えていました。誰かが私にそれをここでどのように使用できるか提案できますか?

BlockingQueueの実装後のコード変更。

私が今気づいた奇妙なことの1つは、以下のelse if loopように、上記のコードが表示されているrun method場合はcommand.getDataCriteria() is Previous、それが入力されてelse if block(which is for New)いること.equals checkです。なぜこれが起こっているのですか?

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

java - 同じコマンド属性を変更する複数のスレッド

問題文:-

以下のプログラムでは、を使用ThreadPoolExecutorしていArrayBlockingQueueます。

各スレッドはUNIQUE ID毎回使用する必要があり、実行する60 minutes or more必要があり60 minutesます。そのID's will get finishedため、これらのIDを再利用する必要があります。だから私はArrayBlockingQueueここでコンセプトを使用しています。

2つのシナリオ:-

  1. command.getDataCriteria()が含まれている場合、Previous各スレッドは常にそれを使用UNIQUE ID between 1 and 1000して解放し、再利用する必要があります。
  2. それ以外の場合、command.getDataCriteria()が含まれている場合、New各スレッドは常にそれを使用UNIQUE ID between 2000 and 3000して解放し、再利用する必要があります。

以下のプログラムで現在直面している問題-

私が直面している問題の1つは

  • run methodもしそうなら、それcommand.getDataCriteria()はまた、正しく起こってはならないものPreviousに入力されますか?else if block(which is for New)そしてまた私はやってい.equals checkますか?なぜこれが起こっているのですか?多くのスレッドが同時に起動し、以前にコマンドを変更したことが原因である可能性がありますか?

else if(command.getDataCriteria().equals("New")) {

マルチスレッドがそれを変更している場合、どうすればこの問題を克服できますか?どんな問題が起こっていても、それはで起こっていrun methodます。私は長い間これに固執しているので、どんな提案も大いに役立つでしょう。たぶん私たちはする必要がありますSynchronize the threads, so that no other thread should modify the command when another thread is trying to execute it.

runnable(実ユニットレベルのコマンドエグゼキュータ)の実装

これにご協力いただきありがとうございます。ありがとう

getNextCommandToExecute method更新-マットによって提案されたコード

そして、コマンドはクラスのトップで次のように宣言されています-

もう1つの方法を更新します:-

0 投票する
2 に答える
1647 参照

java - ThreadPoolExecutorのすべてのタスクがそこでジョブの実行を終了したら、データベースに挿入します

問題の定義:-

insert some values into DatabaseのすべてのタスクがExecutorServiceそこでジョブの実行を終了したらすぐに実行する必要があります。言い換えると、insert into databasedbに挿入する必要があるものは、そこでタスクを終了するすべてのスレッドに依存しているため、すべてのタスクがそこでジョブの実行を終了した場合にのみ実行できます。

では、のすべてのタスクの実行が終了したかどうかを確認しExecutorServiceてから、データベースへの挿入を開始するにはどうすればよいですか。

以下は、を使用してタスクを作成しているコードですThreadPoolExecutor

挿入に使用するコードは以下のとおりです-

したがって、すべてのタスクの実行が終了した後、このforループをどこかに配置する必要があります。

アップデート:-

だからこのようなもの-

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

threadpoolexecutor - ThreadPoolExecutor 使用時のサーバー クラッシュの処理方法

RejectedExecutionException をキャッチし、適切に処理します。しかし、サーバー/jvm が突然クラッシュした場合、どのようにケースをキャッチして処理すればよいか知りたいです。誰でもここで私を助けてくれませんか?

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

java - Java Webapp Executors クラス

Java - webapp は、Executors クラスを介して次のコードとしてスレッドを実行し、固定プール サイズで実行する利点は何ですか。

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

java - マルチスレッドと ThreadPoolExecutor

私は自分が書いた多くのアプリケーションでマルチスレッドを使用してきました。もっと読んでいるうちに出くわしThreadPoolExecutorsました。この 2 つのシナリオを区別することはできませんでした。

それでも私が理解しているのは、タスクを複数の小さなタスクに分割してCPUを利用し、作業を高速化したいタスクがある場合は、マルチスレッドを使用する必要があるということです。またThreadPoolExecutor、タスクのセットがあり、各タスクを互いに独立して実行できる場合に使用します。

間違っていたら訂正してください。ありがとう

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

java - ExecutorService を使用してジョブを並列処理する

多くの URL を処理する必要がある Java プログラムを作成しています。
各 URL は次のジョブを順番に実行します: ダウンロード、分析、圧縮

URL ごとに 1 つのスレッドですべてのジョブを一度に実行するのではなく、各ジョブに一定量のスレッドを持たせて、すべてのジョブで同時にスレッドが常に実行されるようにします。

たとえば、ダウンロード ジョブには、URL を取得してダウンロードするための複数のスレッドがあり、URL の 1 つがダウンロードされるとすぐに分析ジョブのスレッドに渡され、完了するとすぐに次のスレッドに渡されます。圧縮ジョブのスレッドなど

終了するとすぐに結果を返すため、JavaでCompletionServiceを使用することを考えていますが、それがどのように機能するかわかりません。これまでのところ、私のコードは次のようになります。

私の質問は、ダウンロードしたアイテムを分析ジョブに移動し、すべてのダウンロード ジョブが完了するのを待たずにそこで作業を行うにはどうすればよいですか? ジョブごとに CompletionService を作成することを考えていますが、それは実行可能な方法ですか? そうでない場合、この問題を解決するためのより良い代替方法はありますか? 例を挙げてください。