問題タブ [java.util.concurrent]
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 - javaHashMapのConcurrentModificationExceptionプログラム
コード:
このコードを実行すると、以下の例外が発生します。
この行はCountUpdater.java:58です:
ConcurrentHashMap
私はこのプログラムをグーグルで検索します、私はプレーンの代わりに使用できることを知っていますHashMap
、
しかし、私は知りたいのですが、なぜ私は:を使用しています
HashMapの新しいインスタンスを作成するには、それでもスローしConcurrentModificationException
ますか?
使用しないで修正する方法はConcurrentHashMap
?
手伝ってくれてありがとう :)
java - BlockingQueue の実装: SynchronousQueue と LinkedBlockingQueue の違いは何ですか
これらのBlockingQueueの実装を見て、それらの違いを理解できません。これまでの私の結論:
- SynchronousQueueは必要ありません
- LinkedBlockingQueueは FIFO を保証します。BlockingQueueを FIFO にするには、パラメーター true で作成する必要があります
- SynchronousQueueは、ほとんどのコレクション メソッドを中断します (contains、size など)。
では、いつSynchronousQueueが必要になるのでしょうか? この実装のパフォーマンスはLinkedBlockingQueueより優れていますか?
さらに複雑にするために...なぜExecutors.newCachedThreadPoolは SynchronousQueue を使用するのに、他のもの ( Executors.newSingleThreadExecutorおよびExecutors.newFixedThreadPool ) は LinkedBlockingQueue を使用するのでしょうか?
編集
最初の疑問は解決しました。しかし、他の人 ( Executors.newSingleThreadExecutorとExecutors.newFixedThreadPool ) が LinkedBlockingQueue を使用しているときに、 Executors.newCachedThreadPoolが SynchronousQueue を使用する理由はまだわかりません。
私が得たのは、SynchronousQueue を使用すると、空きスレッドがない場合、プロデューサーがブロックされるということです。ただし、スレッドの数は事実上無制限であるため (必要に応じて新しいスレッドが作成されます)、これは決して起こりません。では、なぜ SynchronousQueue を使用する必要があるのでしょうか。
java - マルチスレッドでのConcurrentLinkedQueueの使用
プロジェクトの一環として、固定数のスレッドを含むスレッドプールを作成する必要があります。スレッドが異なるプロセスに割り当てられるたびに、スレッドと一緒にその数のセッションも割り当てる必要があります。ConcurrentLinkedQueue(固定の)を使用したいサイズ)スレッドが完了したときにセッションをキューに戻し、他のプロセスで使用できるようにするためにセッションを保存します。要件が明確になっていることを願っています...誰かが私にいくつかのquidelineを与えることができますかこれをどのように実装できるか..?ConcurrentLinkedQueueをどのように使用できるか..?
java - 並行Java1.5以降のアクティブオブジェクトパターン
クラスを使用して並行Javaでアクティブオブジェクトパターンを開発しようとしています。java.util.concurrent
とを使用して説明しClient
ますServer
。サンプルServer
は次のとおりです。
そしてサンプルClient
:
また、Message
カプセル化の例は次のとおりです。
そして、実行中のコードのサンプル:
メッセージを伝えるために、実装の詳細をいくつか削除しました。
ここで問題となるServer
のstate
は、の場合true
、着信メッセージは待機する必要がありawait
、現在のメッセージで呼び出されます。ただし、IllegalMonitorStateException
これは、現在のメッセージが待機する現在のスレッドを所有していないことを意味します。Server
ただし、現在のメッセージはとそのスレッドプールで呼び出されるため、現在のメッセージは現在の実行スレッドにもアクセスできるため、これは奇妙だと思います。
アイデアや提案、またはを使用したこのパターンの既知の実用的な実装に最も感謝しますjava.util.concurrent
。前もって感謝します。
更新:このブログ投稿
で展開できるソリューションについて説明しました。お役に立てば幸いです。
java - 1 つの Java スレッドが別のスレッドの結果を待つようにするにはどうすればよいですか?
別のスレッドの結果をスレッドに待機させる必要があることがよくあります。java.util.concurrent でこれをサポートする必要があるようですが、見つかりません。
Exchangerは私が話していることに非常に近いですが、双方向です。スレッド A がスレッド B で待機するだけで、両方が相互に待機することはありません。
はい、CountDownLatch または Semaphore または Thread.wait() を使用して、計算の結果を自分で管理できることはわかっていますが、便利なクラスがどこかに欠けているようです。
私は何が欠けていますか?
アップデート
java - JDK6.0または他のライブラリにConcurrentLinkedHashSetはありますか?
私のコードスローは例外に従います:
私はConcurrentLinkedHashSet
それを修正したい、
しかし、私はでしか見つかりませんでしConcurrentSkipListSet
たjava.util.concurrent
、これはTreeSet
、ではありませんLinkedHashSet
JDK6.0ConcurrentLinkedHashSet
に簡単にアクセスする方法はありますか?
手伝ってくれてありがとう :)
java - Javaにミューテックスはありますか?
JavaにMutexオブジェクトがありますか、それとも作成する方法はありますか? 1 パーミットで初期化された Semaphore オブジェクトが役に立たないので、質問しています。この場合を考えてみましょう:
最初の取得時に例外が発生した場合、catch ブロックでの解放によって許可が増加し、セマフォはバイナリ セマフォではなくなります。
正しい方法はありますか?
上記のコードは、セマフォがバイナリになることを保証しますか?
java - java.util.concurrent でのメモリーの一貫性
Memory Consistancy Propertyから、次のことがわかります。
これは、あるスレッドでオブジェクトを作成して ConcurrentLinkedQueue に入れると、別のスレッドがオブジェクトのすべてのプロパティを参照し、そのオブジェクトで他の同期が行われないことを意味しますか?
例えば:
1つのスレッドで:
…………
…………
別のスレッドで
…………
2 番目のスレッドは確実にcomplex
オブジェクトのプロパティを認識しますか? 最初のスレッドがオブジェクトをキューに置いた後、2 番目のスレッドがたまたまオブジェクトをフェッチして出力した場合。
通常、オブジェクトが共有されている場合は、マルチスレッド環境でオブジェクトを同期する必要があることがわかっています。
お気に入り
java - Java スレッドを順次実行する
3 つのスレッドを順番に実行するにはどうすればよいでしょうか? たとえば。スレッド 1、スレッド 2、スレッド 3。あるスレッドの参照を別のスレッドに渡し、run() メソッドから呼び出すことはできません。
したがって、コードは次のようになります。
そしてアウトプットは
これは ThreadPoolExecutor を使用し、ブロッキング キューを使用することで可能になりますが、それでも受け入れられる答えではありません。