問題タブ [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.
scala - ScalaコンパニオンオブジェクトからAtomicReferenceFieldUpdaterを取得するにはどうすればよいですか?
いくつかのコレクション構造にリンクされたノードがある場合、その次のリンクをAtomicReference(アトミックCASの更新が必要)にしたくないので、次のように宣言します。
次に、コンパニオンで次のように宣言します。
実行時に、次のエラーが発生します。
したがって、実行時にコンパニオンオブジェクトはそうではconcurrent.Link$
なくconcurrent.Link
、別のクラスが別のクラスのプライベートメンバーにアクセスすることはできません。
しかし、私がjavap -p concurrent.Link
私は得る:
したがって、クラスでAtomicReferenceFieldUpdater
宣言された静的インスタンス以外のすべてがあります。Link
AtomicReferenceFieldUpdater
問題は、揮発性変数を指すScalaのインスタンスを取得するにはどうすればよいですか?
私がこれまでに見つけた唯一の方法は、Javaに戻って(次のNodeフィールドとstaticを使用してAbstractLinkを実装するAtomicReferenceFieldUpdater
)、そこから継承することです。これは醜いです。
java - java.util.concurrent.Executorはどのように機能しますか?
java.util.concurrent.Executor
「実際の」スレッドをどのように作成しますか?Executorを実装しているか、任意のexecutorサービス(ThreadPoolExecutorなど)を使用しているとします。JVMは内部でどのように機能しますか?
java - java.util.concurrent.Futureオブジェクトをどのように「無視」しますか?
バグを見つけられますか?これにより、がスローされjava.lang.OutOfMemoryError
ます。
バグは、無視しているオブジェクトを返すため、executorService.submit()
の代わりに呼び出すことです。を使用すると、このプログラムは実際には永久に実行されます。executorService.execute()
submit()
Future
execute()
ただし、 :execute()
を使用する場合のように、メソッドを持つという贅沢が常にあるとは限りません。ScheduledExecutorService
何も返さず、計算するだけのタスクで何をすべきでしょうか?
どんなアイデアでもありがたいです!
編集:ThreadPoolExecutor
spurge()
は有望に見えましたが、キャンセルされたタスクのみを削除します。
java - 同時実行 - DB アクセス
保留中のレコードを取得し、それらを作業単位として「InProcess」状態に更新する処理が必要です。以下のコードが並行性をサポートし、現在のスレッドが処理されるまで他のスレッドが待機することを確認したいと思います。これを達成するための最良の方法は何ですか?
ご意見をお待ちしております。ありがとう。
java - max のスレッドセーフな実装
Web サーバーの統計を収集するグローバル オブジェクトを実装する必要があります。methodを持つStatistics
シングルトンがありaddSample(long sample)
、その後 を呼び出しますupdateMax
。これは明らかにスレッドセーフでなければなりません。統計全体の最大値を更新するこの方法があります。
この実装は正しいですか?シンプルよりも速いと思うので、私はjava.util.concurrentを使用していますsynchronized
。これを実装するための他の/より良い方法はありますか?
java - スレッドセーフ環境で静的 Arraylist を定義する方法
スレッド セーフ環境で静的 Arraylist を定義する方法。Synchronized キーワードを試してみましたが、Java 並行パッケージの Automic クラスを使用することが静的配列リストの最適なソリューションであると聞きました。安全な方法で静的配列リストを宣言して使用する方法を誰か教えてもらえますか?
アップデート:
私のコードでは、アプリケーションにログインしているユーザーの詳細を維持するための静的リストがあります
ログイン中およびホームページへのアクセス中 (ホームページにアクセスしたときは常に) userSessionList でユーザーの詳細をチェックし、利用できない場合は userSessionList に詳細を追加し、ログアウト中にリストからユーザーの詳細を削除します。ログイン中
ログアウト中
そのため、読み取りと書き込みのリクエストが同時に行われる可能性があります
java - iterator.hasNextがBlockingQueueで機能しないのはなぜですか?
BlockingQueueでイテレータメソッドを使用しようとしましたが、hasNext()が非ブロッキングであることがわかりました。つまり、要素が追加されるまで待機せず、要素がない場合はfalseを返します。
だからここに質問があります:
- これは悪いデザインですか、それとも間違った期待ですか?
- BLockingQueueのブロッキングメソッドをその親のCollectionクラスメソッドで使用する方法はありますか(たとえば、あるメソッドがコレクションを期待していた場合、ブロッキングキューを渡し、キューにさらに要素が含まれるまでその処理が待機することを期待できますか)
これがサンプルコードブロックです
このコードは、最大で1回だけ反復を出力します。
java - getAndWait() メソッドを持つ HashMap は存在しますか? たとえば、BlockingConcurrentHashMap の実装ですか?
多くのスレッドが を生成する可能性がありHashMap
、場合によっては、次のようなオブジェクトが HashMap に存在するまで待機 (ブロック) する必要があります。
そんなものはもうあるのだろうかと思うと、車輪の再発明は嫌いだ。
java - ConcurrentHashMap$HashEntry の「次の」フィールドが final である理由
java.util.ConcurrentHashMap のソース コードを読んでいるとnext
、ConcurrentHashMap$HashEntry のフィールドが final であることがわかります。next
:add と removeの値を変更できる操作は 2 つあります。next
しかし、これらの 2 つの操作は、フィールドが最終的なものでなくてもスレッドを安全に実行できます。なぜnext
フィールドが最終的なのか理解できません。誰か教えてもらえますか? ありがとう。
java - JVM でのスレッド実装の操作
最近は、並行オブジェクトのマルチコアへの展開に取り組んでいます。サンプルでは、仕様にブロッキングBlockingQueue.take()
と記載されているメソッドを使用しています。これは、メソッドが、他の並行タスクに再利用できるように、囲んでいるスレッドのリソースを解放しないことを意味します。これは、JVM インスタンス内のライブ スレッドの総数が制限されているため便利です。また、アプリケーションが何千ものライブ スレッドを必要とする場合、中断されたスレッドを再利用できることが不可欠です。一方、JVM は、アプリケーション レベルのスレッドから Java の OS レベルのスレッドへの 1:1 マッピングを使用します。つまり、各 Java Thread インスタンスは、基盤となる OS レベルのスレッドになります。
java.util.concurrency
現在のソリューションは、Java 1.5+ に基づいています。それでも、多数に拡張できるワーカー スレッドが必要です。今、私は次の答えを見つけることに興味があります:
java.lang.Thread
独自の Thread 実装をプラグインできるように、JVMの実装を置き換える方法はありますか?- これは、JVM のスレッド実装の C++ セクションを微調整して再コンパイルすることによってのみ可能ですか?
- Java の古典的なスレッドを置き換える方法を提供するライブラリはありますか?
- 繰り返しますが、同じ行に、Javaの一部のスレッドをOS レベルの1 つのスレッドのみにマップする方法をガイドするライブラリまたは方法はありますか?
また、これがJVMのさまざまな実装について議論しているのを見つけましたが、それらが役立つかどうかはわかりません.
事前にコメントやアイデアをお寄せいただきありがとうございます。