問題タブ [blockingqueue]

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

java - ブロックしない制限付きBlockingQueue

この質問のタイトルは、これが存在するかどうか疑問に思いますが、それでも:

サイズによって制限され、ブロックされないJavaのBlockingQueueが実装されているかどうかに関心がありますが、あまりにも多くの要素をキューに入れようとすると例外がスローされます。

編集-BlockingQueueをエグゼキュータに渡します。エグゼキュータはoffer()ではなくadd()メソッドを使用していると思います。別のBlockingQueueをラップし、add()への呼び出しをoffer()に委任するBlockingQueueを作成できます。

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

java - 可変遅延の ScheduledExecutorService

java.util.concurrent.BlockingQueue から要素を取得して処理するタスクがあるとします。

頻度を動的に変更できる場合、タスクをスケジュールまたは再スケジュールするにはどうすればよいですか?

  • アイデアは、データ更新のストリームを取得し、それらをバッチで GUI に伝達することです。
  • ユーザーは更新の頻度を変更できる必要があります
0 投票する
8 に答える
13195 参照

java - java BlockingQueueにはブロッキングピークがありませんか?

オブジェクトのブロックキューがあります。

キューにオブジェクトができるまでブロックするスレッドを作成したいと思います。BlockingQueue.take()によって提供される機能に似ています。

ただし、オブジェクトを正常に処理できるかどうかわからないため、オブジェクトを削除せずに、peek()だけを実行したいと思います。オブジェクトを正常に処理できる場合にのみ、オブジェクトを削除したいと思います。

そこで、ブロッキングpeek()関数が必要です。現在、peek()は、javadocsに従って、キューが空の場合にのみ戻ります。

私は何かが足りないのですか?この機能を実現する別の方法はありますか?

編集:

スレッドセーフキューを使用して、代わりにピークしてスリープしたかどうかについて何か考えはありますか?

コンシューマースレッドと(個別の)プロデューサースレッドが1つしかないことに注意してください。これはBlockingQueueを使用するほど効率的ではないと思います...コメントをいただければ幸いです。

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

java - 生産者/消費者作業キュー

私は自分の処理パイプラインを実装するための最良の方法に取り組んでいます。

私のプロデューサーは、BlockingQueueに作業をフィードします。コンシューマー側では、キューをポーリングし、Runnableタスクで取得したものをラップして、ExecutorServiceに送信します。

これは理想的ではありません。もちろん、ExecutorServiceには独自のキューがあるので、実際に起こっていることは、常に作業キューを完全に使い果たし、タスクキューをいっぱいにしていることです。タスクキューは、タスクが完了するとゆっくりと空になります。

プロデューサー側でタスクをキューに入れることができることはわかっていますが、実際にはそうはしません。作業キューの間接参照/分離がダム文字列であることが好きです。彼らに何が起こるかは、実際にはプロデューサーの仕事ではありません。プロデューサーにRunnableまたはCallableをキューに入れるように強制すると、抽象化、IMHOが壊れます。

ただし、共有ワークキューで現在の処理状態を表す必要があります。消費者が追いついていない場合は、生産者をブロックできるようにしたいと思います。

エグゼキュータを使いたいのですが、エグゼキュータのデザインと戦っているような気がします。Kool-adeを部分的に飲むことはできますか、それとも飲み込む必要がありますか?私はキューイングタスクに抵抗することに頭を悩ませていますか?(1タスクキューを使用するようにThreadPoolExecutorを設定し、そのexecuteメソッドをオーバーライドして、reject-on-queue-fullではなくブロックすることができると思いますが、それはひどい感じです。)

提案?

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

java - 削除されたオブジェクトをログに記録する BlockingQueue デコレーター

BlockingQueueプロデューサーとコンシューマーの状況で使用されている実装があります。このキューから取得されたすべてのオブジェクトがログに記録されるように、このキューを装飾したいと思います。単純な実装がどのようになるかはわかっています。すべてのメソッドが委譲するコンストラクターでBlockingQueuea を実装して受け入れるだけです。BlockingQueue私が見逃している別の方法はありますか?もしかして図書館?コールバック インターフェイスを備えたものはありますか?

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

java - BlockingQueue と putAll

java の BlockingQueue に putAll メソッドがない理由を知っている人はいますか? そのような方法に問題はありますか?BlockingQueue を完全に再実装することなく、この問題を回避する良い方法はありますか?

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

java - ブロッキング キューからの取得を終了する方法

Executor と Blocking Queue を使用していくつかのタスクを実行するコードがあります。結果はイテレータとして返される必要があります。これは、私が取り組んでいるアプリケーションが期待するものだからです。ただし、キューに追加されたタスクと結果の間には 1:N の関係があるため、ExecutorCompletionServiceを使用することはできません。hasNext() を呼び出している間、キューからの結果の取得を停止できるように、すべてのタスクがいつ終了し、すべての結果がキューに追加されたかを知る必要があります。アイテムがキューに入れられると、別のスレッドが消費する準備ができている必要があることに注意してください ( Executor.invokeAll()、すべてのタスクが完了するまでブロックしますが、これは私が望むものでもタイムアウトでもありません)。これは私の最初の試みでした。機能しない場合でも、ポイントを示すためだけに AtomicInteger を使用しています。誰かがこの問題を解決する方法を理解するのを手伝ってくれますか?

呼び出しコードは次のようになります。

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

java - 1 つのスレッド内で複数の BlockingQueues から読み取る

3 つの Java のインスタンスがあり、 1 つのスレッドのみを使用しLinkedBlockingQueueてそれらから読み取り (操作) を実行したいと考えています。take素朴なアプローチは、キューごとに 1 つのスレッドを持つことです。

selectJava でキューをブロックするための UNIX システム コールのようなものはありますか?

ありがとう。

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

java - BlockingQueue で待機中のスレッドをすぐに解放する方法

BlockingQueueon で待機している 1 つおよびいくつかのスレッドを考えてみましょうpoll(long, TimeUnit)(おそらく on もtake())。

キューが空になり、待機中のスレッドに待機を停止できることを通知する必要があります。予想される動作は、null返されるか、宣言さInterruptedExceptionれたスローのいずれかです。

Object.notify()LinkedBlockingQueueスレッドが内部ロックを待機しているため、機能しません。

簡単な方法はありますか?