問題タブ [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.
java - ブロックしない制限付きBlockingQueue
この質問のタイトルは、これが存在するかどうか疑問に思いますが、それでも:
サイズによって制限され、ブロックされないJavaのBlockingQueueが実装されているかどうかに関心がありますが、あまりにも多くの要素をキューに入れようとすると例外がスローされます。
編集-BlockingQueueをエグゼキュータに渡します。エグゼキュータはoffer()ではなくadd()メソッドを使用していると思います。別のBlockingQueueをラップし、add()への呼び出しをoffer()に委任するBlockingQueueを作成できます。
java - 可変遅延の ScheduledExecutorService
java.util.concurrent.BlockingQueue から要素を取得して処理するタスクがあるとします。
頻度を動的に変更できる場合、タスクをスケジュールまたは再スケジュールするにはどうすればよいですか?
- アイデアは、データ更新のストリームを取得し、それらをバッチで GUI に伝達することです。
- ユーザーは更新の頻度を変更できる必要があります
java - java BlockingQueueにはブロッキングピークがありませんか?
オブジェクトのブロックキューがあります。
キューにオブジェクトができるまでブロックするスレッドを作成したいと思います。BlockingQueue.take()によって提供される機能に似ています。
ただし、オブジェクトを正常に処理できるかどうかわからないため、オブジェクトを削除せずに、peek()だけを実行したいと思います。オブジェクトを正常に処理できる場合にのみ、オブジェクトを削除したいと思います。
そこで、ブロッキングpeek()関数が必要です。現在、peek()は、javadocsに従って、キューが空の場合にのみ戻ります。
私は何かが足りないのですか?この機能を実現する別の方法はありますか?
編集:
スレッドセーフキューを使用して、代わりにピークしてスリープしたかどうかについて何か考えはありますか?
コンシューマースレッドと(個別の)プロデューサースレッドが1つしかないことに注意してください。これはBlockingQueueを使用するほど効率的ではないと思います...コメントをいただければ幸いです。
java - 生産者/消費者作業キュー
私は自分の処理パイプラインを実装するための最良の方法に取り組んでいます。
私のプロデューサーは、BlockingQueueに作業をフィードします。コンシューマー側では、キューをポーリングし、Runnableタスクで取得したものをラップして、ExecutorServiceに送信します。
これは理想的ではありません。もちろん、ExecutorServiceには独自のキューがあるので、実際に起こっていることは、常に作業キューを完全に使い果たし、タスクキューをいっぱいにしていることです。タスクキューは、タスクが完了するとゆっくりと空になります。
プロデューサー側でタスクをキューに入れることができることはわかっていますが、実際にはそうはしません。作業キューの間接参照/分離がダム文字列であることが好きです。彼らに何が起こるかは、実際にはプロデューサーの仕事ではありません。プロデューサーにRunnableまたはCallableをキューに入れるように強制すると、抽象化、IMHOが壊れます。
ただし、共有ワークキューで現在の処理状態を表す必要があります。消費者が追いついていない場合は、生産者をブロックできるようにしたいと思います。
エグゼキュータを使いたいのですが、エグゼキュータのデザインと戦っているような気がします。Kool-adeを部分的に飲むことはできますか、それとも飲み込む必要がありますか?私はキューイングタスクに抵抗することに頭を悩ませていますか?(1タスクキューを使用するようにThreadPoolExecutorを設定し、そのexecuteメソッドをオーバーライドして、reject-on-queue-fullではなくブロックすることができると思いますが、それはひどい感じです。)
提案?
java - 削除されたオブジェクトをログに記録する BlockingQueue デコレーター
BlockingQueue
プロデューサーとコンシューマーの状況で使用されている実装があります。このキューから取得されたすべてのオブジェクトがログに記録されるように、このキューを装飾したいと思います。単純な実装がどのようになるかはわかっています。すべてのメソッドが委譲するコンストラクターでBlockingQueue
a を実装して受け入れるだけです。BlockingQueue
私が見逃している別の方法はありますか?もしかして図書館?コールバック インターフェイスを備えたものはありますか?
java - BlockingQueue と putAll
java の BlockingQueue に putAll メソッドがない理由を知っている人はいますか? そのような方法に問題はありますか?BlockingQueue を完全に再実装することなく、この問題を回避する良い方法はありますか?
java - ブロッキング キューからの取得を終了する方法
Executor と Blocking Queue を使用していくつかのタスクを実行するコードがあります。結果はイテレータとして返される必要があります。これは、私が取り組んでいるアプリケーションが期待するものだからです。ただし、キューに追加されたタスクと結果の間には 1:N の関係があるため、ExecutorCompletionServiceを使用することはできません。hasNext() を呼び出している間、キューからの結果の取得を停止できるように、すべてのタスクがいつ終了し、すべての結果がキューに追加されたかを知る必要があります。アイテムがキューに入れられると、別のスレッドが消費する準備ができている必要があることに注意してください ( Executor.invokeAll()、すべてのタスクが完了するまでブロックしますが、これは私が望むものでもタイムアウトでもありません)。これは私の最初の試みでした。機能しない場合でも、ポイントを示すためだけに AtomicInteger を使用しています。誰かがこの問題を解決する方法を理解するのを手伝ってくれますか?
呼び出しコードは次のようになります。
java - 1 つのスレッド内で複数の BlockingQueues から読み取る
3 つの Java のインスタンスがあり、 1 つのスレッドのみを使用しLinkedBlockingQueue
てそれらから読み取り (操作) を実行したいと考えています。take
素朴なアプローチは、キューごとに 1 つのスレッドを持つことです。
select
Java でキューをブロックするための UNIX システム コールのようなものはありますか?
ありがとう。
java - BlockingQueue で待機中のスレッドをすぐに解放する方法
BlockingQueue
on で待機している 1 つおよびいくつかのスレッドを考えてみましょうpoll(long, TimeUnit)
(おそらく on もtake()
)。
キューが空になり、待機中のスレッドに待機を停止できることを通知する必要があります。予想される動作は、null
返されるか、宣言さInterruptedException
れたスローのいずれかです。
Object.notify()
LinkedBlockingQueue
スレッドが内部ロックを待機しているため、機能しません。
簡単な方法はありますか?