問題タブ [executors]

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 に答える
3397 参照

java - サーバーソケットクライアントの新しいスレッドの代わりにExecutorを使用する

私は現在、複数のクライアントが接続するサーバーを作成しています。通信プロトコルは、基本的にサーバーがクライアントにタスクを送信し、タスクが実行されたときにクライアントが応答するというものです。クライアントはサーバーへの接続を維持し、切断しないでください。

現在、各クライアントを処理するための新しいスレッドを開始しています。精神的には、私の現在のソリューションは次のようなものです:(実際にはJava同時実行からのソース)

しかし、エグゼキューターはより安定していて拡張性が高いように見えるので、エグゼキューターを使用したいと思います。したがって、サーバーがクライアントにメッセージを送信できるようにするには、クライアントを実行しているエグゼキューターとは別にクライアントを追跡する必要があります。したがって、クライアントをCopyOnWriteArrayListクライアントのどこに配置し、Serverクラスに次のようなものがある場合:

これにより、CopyOnWriteArrayListを反復処理して、すべてのクライアントにコマンドを送信し、切断されたクライアントを削除することができます。これは堅牢なソリューションでしょうか?何らかの理由でランナブルが例外を伝播した場合、エグゼキュータはどうなりますか?

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

netty - netty websocket + 継続的な PERIODIC データ プッシュ

netty の websocket サーバーから定期的に (たとえば n 秒ごとに) データを継続的にプッシュする最良の方法は何でしょうか?

編集 :

私はこの投稿に出くわしました: Netty を使用して Java で継続的なデータを送信するための最良の方法と、答えによると、while/sleep は非常にスケーラブルではありません。Executor でジョブをスケジュールするにはどうすればよいですか?

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

android - ThreadPoolExecutor を使用した IntentService ... 推奨されるかどうか

着信 SMS をリッスンし、特定の方法で処理する Android アプリを設計しています。メッセージを受信して​​インテント サービスに送信するブロードキャスト レシーバーがあります。

インテント サービスの目的は、SMS を自分の DB に保存し、そのメッセージを HTTP POST 経由でサーバーに送信し、結果を評価してアプリの DB を更新し、最終的に送信者に返信することです。これまでのところすべて問題ありませんが、大量の SMS が同時に到着する可能性があるため、サーバーとの通信を切り離して別のスレッドに入れたいと考えています。

だから私がこれまでにやっていることはこれです:

これまでのところは順調ですが、大量のメッセージを扱うこの実装は信頼できません。

だから、私の質問は:

インテント サービスでは、ThreadPoolExecutor を使用することをお勧めしますか? 私はこのようなものになります:

一定期間メッセージが受信されず、IntentService が停止するとどうなりますか。それによって作成されたスレッドは引き続き実行されますか?

このアプローチが、私が達成しようとしていることに対処するための最良の方法であるかどうかはわかりません。

ありがとう

アップデート:

  • このアプリには UI アクティビティはまったくありません。
  • サーバーとの通信にはかなりの時間がかかる可能性があるため、メッセージの処理時間を最小限に抑えたいと考えています。これにより、キュー内の次の SMS がすぐに取得され、処理が開始されます。

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

java - スレッドプールによって実行されているオブジェクトへのアクセス

私のプログラムでは、ConcurrentHashMapを使用して、複数の実行中のオブジェクトへの参照を保持していました。私のサーバーには次のものがあります。

ConcurrentHashMapからチャットルームにアクセスできるので、これは機能しますか、それともスレッドプールで何かをする必要がありますか?

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

java - ScheduledThreadPoolExecutor から保留中のアイテムをキャンセルするには?

タスクをスケジュールし、特定のイベントが発生したときにそれらを削除する必要があるタスクがあります。私は ScheduledThreadPoolExecutor を使用してタスクをスケジュールしています。これは非常に簡単です。しかし、保留中のアイテムをキャンセルする 2 つの方法を見つけました。どちらも少し奇妙に見えます。

それらのいずれかが製品品質であるかどうかに興味があります。どちらでもない場合、あなたは何を提案しますか?

これが私がしていることのスケルトンです:

これは候補 1 です。

これは候補 2 です。

どちらも、ScheduledExecutor インターフェイスで指定されていない ScheduledThreadPoolExecutor.queue プロパティに依存しているため、私にはハックのように見えます。ScheduledThreadPoolExecutor の不変式に違反する可能性があり、それを検出するのが遅すぎるのではないかと少し心配しています。

では、これらのスニペットは、私が望んでいることを実行するでしょうか? それを行うためのより良い/よりクリーンな方法はありますか?

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

java - Java- invokeAll を使用して将来の結果を順番に取得しますが、一部のスレッドに対してのみです

私は...タイトルをより適切に表現する方法が本当にわかりません。しかし、基本的に、私が持っているのは、これらすべてのスレッドが忙しく動作しているスレッド プールです。配属された順番で結果を報告してもらいたいが、同時にバッチで作業したい。説明すると、例は次のようになります

基本的に、プール スレッドには 8 つのスレッドがあり、最終的に 20 のタスクがあります (これらは単なる例です)。私が正しく理解している場合、これが現在機能する方法は、20 個のタスクすべてが完了するまで待機してから、それらを順番に出力することです (1 から 20 まで)。このプログラムが行うことになっているのは、バイトの連続ストリームを出力することです (スレッドによって処理され、順序をそのまま維持する必要があるため、future インターフェイスを使用しました)。20 個のタスクがすべて完了するまで待ってもかまいませんが、とにかく、スレッドが進むにつれて順番に出力されるようにする必要があります。

方法がない場合や、invokeAll の仕組みを完全に誤解している場合は、その説明も歓迎します。事前にたくさんありがとう!Executor について知ったばかりなので、少し混乱しています。

ランダムな補遺ですが、callable からバイト配列を返すことはできますか?

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

java - エグゼキュータを再初期化する際のベストプラクティス

を使用して複数のタスクを実行するSwingアプリケーションがあります。ThreadPoolExecutorある時点で、すべてを再初期化したいです。私が使用しているexecutor.purge();executor.getQueue().clear(); これで十分ですか?これを実行するためのより良い方法/実践はありますか?前もって感謝します。

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

java - タスクを実行キューに戻す方法はありますか

によって実行される一連のタスク (つまりRunnables) がありExecutorます。
各タスクを続行するには、特定の条件が有効である必要があります。Executorタスクをキューの最後に移動し、後で条件が有効になり、タスクを実行して終了できるようになったときにそれらを実行するように構成する方法があるかどうかを知りたいと思います。
したがって、動作は次のようになります。

  1. Thread-1キューからタスクを取得し、run呼び出されます
  2. 内部runの条件はまだ有効ではありません
  3. タスクが停止し、Thread-1タスクをキューの最後に配置して、実行する次のタスクを取得します
  4. 後でThread-X(スレッドプールから) キュー条件からタスクを再度選択し、タスクが実行されている状態が有効です
0 投票する
1 に答える
1982 参照

java - ScheduledThreadPoolExecutors とカスタム キュー

を使用するThreadPoolExecutorと、さまざまなコンストラクターがあり、プールの作業キューに独自のキューを渡したり使用したりできます。aは のサブクラスですが、コンストラクターははるかに少ないことが
わかりました。自分のワーク キューを使用し、引き続き使用 する方法はありますか?ScheduledThreadPoolExecutorThreadPoolExecutor
ScheduledThreadPoolExecutor

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

java - 同期方法の違いについて

この下の質問を重複したものとして扱わないでください..!

マルチスレッドを一度に 1 つずつ順番に実行できるようにするクラスを開発しました。このクラスの claimAccess 関数と release Access 関数の間のすべてのアプリケーション コードは、一度に 1 つのスレッドでのみ実行されます。他のすべてのスレッドは、前のスレッドが完了するまでキューで待機します。今、エグゼキュータ、サイクルバリア、カウントダウンラッチなどの他の手段でこれと同じことを達成できるかアドバイスしてください..!!他のアプローチでこれを構築する方法を提案してください