問題タブ [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 投票する
2 に答える
1739 参照

recursion - 再帰メソッドで Future と Callable を使用するには?

Future と Callable を使用して、dfs 再帰メソッドを並列に変換して効率を改善しようとしています。しかし、それを正しく行う方法がわかりません。コードは次のとおりです。

私が期待しているのは、再帰メソッドが task.get() の戻り値を待たずに計算を続けることです。したがって、深さ 3 に進むたびに、将来のタスクを送信し、別の子を計算するために戻りますが、タスクは同時に独自のサブツリーを計算します。

ただし、この方法はまだ並列ではなく、順番に行われていることがわかりました。(メソッドが呼び出されるたびに深さを出力しましたが、結果はフューチャーとエグゼキューターを使用しないメソッドと同じで、常に遅くなりました。)

これは Future と Callable を使用する正しい方法ではないと思います。いくつかの例を見つけましたが、再帰的な方法を使用していません。最も一般的な例は、Future List> のリストを持ち、毎回タスクを送信し、その後別のループで Future リストを反復することです。

Future と Executor を再帰的な方法で実装する方法を知っている人はいますか?

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

java - Java で、追加のタスクを自分自身に送信する可能性がある場合に executorservice をシャットダウンする方法

タスクのパイプラインがあり (パイプライン内の各タスクには異なる並列処理要件があります)、各タスクは異なる ExecutorService で動作します。タスクはデータのパケットで動作するため、10 個のデータ パケットがある場合、10 個のタスクが に送信されservice1、データ パケットごとに 1 つのタスクが送信されます。にサブミットされたタスクservice1が実際に呼び出されると、新しいタスクをサブミットしてデータパケットをさらに処理することがservice2できservice3ます。

次のコードは正常に動作します。

  • shutdown()service1すべてが送信された後に呼び出されますservice1
  • その後、shutdown() の前に送信されたすべてのタスクが実際に実行を完了するまで、awaitTermination() は返されません。--その後、 onがshutdown()呼び出されますが、送信されたすべてのタスクが完了し、すべてのタスクが送信されているためです。-- などservice2service1service2service1service2shutdown()service2service3

    /li>

ただしservice2、データパケットを小さなパケットに分割して追加のタスクを送信できるケースを追加したservice2ところ、コードが失敗しています。問題は、すべてのタスクが完了するshutdown()と呼び出されることですが、実行中のタスクから追加のタスクを送信する必要があります。service2service1service2service2

私の質問:

  1. 送信されたすべてのタスクの実行が終了した後に再実行しますかshutdown()、それともすぐに戻りますが、既に送信されたタスクの実行を停止しませんか? 更新:以下に回答
  2. 新しい問題を解決するにはどうすればよいですか?
0 投票する
1 に答える
967 参照

java - エグゼキュータ スレッドを中断する方法

エグゼキュータのスレッドを中断する正しい方法は? 私はこれを持っています:メソッドを持つWorkerという名前のスレッドクラス:

そしてメインクラス:

worker.interrupt();orを呼び出そうとしましexecutorService.shutdownNow();たが、スレッドが続行し、isInterrupted() が false です。

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

java - 別のタスクと並行してタスクを実行する

Fooクラスを使用する次のクラスがありますFooProcessor。だから私がやりたいのは、cp1インスタンスプロセスメソッドを実行しながら、並行して実行したいcp2.process().

ただし、cp1 を順次実行したいので、実行して完了させたいのですが、cp2 が完了しないか失敗しても問題ありません。失敗しない場合は、結果に参加したいと思います。このサンプルでは何も返されていませんが、結果を返したいです。

この目的のために、TaskExecutor を使用する必要がありますか? またはスレッド?

cp1 と並行して cp2 だけを実行したい。または、さらに追加する場合は、cp3 と言って、それを cp1 と並行して実行したいと考えています。

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

java - バックグラウンドタスクを実行する前に、swingworkerをキャンセルして完了するのを待つことはできますか?

バックグラウンドタスクを実行する前に、をキャンセルしSwingworkerて完了するのを待つことはできますか?doInBackground()または、 Swing Worker全体をキャンセルせずに、コードを実行するタスクに割り込みを送信することもできます。

私の問題は、コードインが完了done()する前にコードインを開始したくないということです。doInBackground()以前のコードではキャンセルが呼び出されることはありませんでした。Swingworker代わりに、がチェックし、クローズダウンが適切に設定されているかどうかを確認する揮発性ブール値を設定しましたWidgetControllerWidgetControllerこのフラグをチェックするのに時間がかかることがあることを除いて、これはすべて正常に機能したので、割り込みメソッドを使用できるようにする必要があります。

疑似例

ユーザーが[開始]をクリックするとダイアログが表示されます。WidgetDialogListenerこれにより、のインスタンスが作成されWidgetWorker、これが開始WidgetControllerされ、が表示されます。通常の表示がWidgetProgressDialog完了すると、実行内容の概要が表示されます。WidgetControllerShowWidgetReportWidgetController

WidgetControllerが実行されている間、WidgetProgressDialog進行状況を示すが表示されます。ユーザーがキャンセルボタンをクリックして進行を停止すると、実際に完了するのを待たずWidgetControllerに割り込みが送信さ れ、doneメソッドが呼び出されて表示されます。しかし、実際に完了するまで、これを実行したくありません。widgetcontrollerShowWidgetReportWidgetController

編集

ジェイコブが私に指摘したことを実際に終えるために、キャンセルされた未来を待つでAwaitingWorker説明されたものを使用しました

おそらく解決策を正確に誤解しているかもしれませんが、どちらの方法でも、GUIスレッドは非GUIタスクが終了するのを待つことになりますが、私が欲しいのは、非GUIタスクが完了する前に完了することです。 GUIスレッド。

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

java - Java で executorService を使用せずにエグゼキュータをシャットダウンする

Executor最初ににキャストせずに Java でをシャットダウンする方法はありExecutorServiceますか? 基本的に私はそれと呼ばれるクラスを持ってExximplements Executorます。Exxをシャットダウンしたい。どうすればいいですか?本質的に、私はをシャットダウンする方法を知る必要がありExecutorます.

編集: 例:

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

java - 初期化が必要なワーカーのプールに作業を送信する

s と Thread プールが行うことに近いと思われる問題がありExecutorますが、それを正確に適合させることはできません。基本的に、初期化に少し時間がかかり、プールしたいワーカーがあり、準備ができたら、それらを使用して作業を行います。Thread でこれを行う必要があります:

エグゼキューターは私にこれを行うことしか許可しませんが:

独自のスレッド プールを作成する必要がありますか? すでにうまくいっているものを書き直すのは恥ずべきことです。またはThreadLocal、ワーカーを保持し、Runnableの run() メソッド内からそれらを管理するために使用する必要がありますか?

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

android - OutputStreamWriterが書き込まれていません

asynctaskを使用してファイルを作成しました。その後、エグゼキュータが1秒に1回そのファイルに情報を書き込むようにスケジュールしました。ボタンに触れると、エグゼキュータがシャットダウンされ、ファイルが閉じられますが、多くの場合、ファイルには何も書き込まれません。

コード:

停止ボタンが押されるたびに、以前に照会されたSharedPreferenceがtrueに設定されます。

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

java - Java Executors とスレッドごと (ワークユニットごとではない) オブジェクト?

スレッド プールの設計パターンの恩恵を受けるタスクがあります (多数の小さなタスクを並行して実行する必要があります)。私は最初に単純なスレッド プールをゼロから実装しました。n 個の Runnables はすべてConcurrentLinkedQueue、キューが空になるまでワーク ユニットをプルし、終了します。次に、「ねえ、Java で Executor を試してみましょう。私の素朴に設計されたシステムよりも、おそらくより適切にテストされ、信頼性が高いからです」と決めました。問題: 私の実装では、各スレッドは while を使用してキューが空になるまで存続し(!queue.isEmpty())、非スレッドセーフ オブジェクトの独自のインスタンスを取得しましたSlowObject fooRunnableのプールに入るすべての を渡そうとするExecutorと、時間効率の悪いオブジェクトのインスタンスがスレッドセーフではないため失敗します。SlowObjectfor eachRunnableは構築にコストがかかるため望ましくありません。

SlowObject「使用しているスレッドの数は?スレッドごとに 1 つ作成し、実行中のスレッドを Runnables に検出させて、使用する正しいオブジェクトを検索させましょう?」と言う方法はありますか? これは脆弱で失敗しやすいように思えますが、代わりにどのデザイン パターンを調べればよいかわかりません。

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

java - 偽のウェイクアップは Future.get() に影響しますか?

Future.get( timeout, unit ) は、Javadoc の Object.wait() および Condition.await() について文書化されているのと同じタイプの誤ったウェイクアップの影響を受けやすいですか?

スレッドがタイムアウト前に終了しないと仮定すると、1000 ミリ秒待たない可能性はありますか? 完全なタイムアウトを待機する (そしてタイムアウト例外を生成する) 必要があるようですが、そうでなければ結果はどうなりますか?