問題タブ [synchronized]
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 - Java:配列要素でダブルチェックロックを行う方法は?
これは私のコードが現在どのように見えるかです:
今、私はそれをスレッドセーフにしたいと思っています。Java での double-checked-locking は「teh 3vilness!!1」であることは知っていますが、ensureInitialized非常に頻繁に呼び出される可能性があるため、同期させたくありません。だから私はこれを行うことを考えています:
これを実際にスレッドセーフにするために何をしなければなりませんか?
いくつかのサブ質問:
- 変数は変更されないので、 volatile
isInitializedにする必要はありませんね。 - 配列要素が変更されました。どうすればそれらを揮発性にできますか?
- 一般的にこれを行うためのより良い方法はありますか?
(また、これはインスタンス メソッドであるため、静的初期化子は機能しないことに注意してください)
powershell - 同期された Hashtable が PowerShell の表示に適していません。試してください: [HashTable]::Synchronized(@{})
例外がスローされないと表示できないタイプ SyncHashTable のプロパティを持つ .Net からのオブジェクトがあります。
1行の再現:
再現で簡単に再生できるマルチライン:
エラー:
誰でもこれについて何か洞察がありますか?
java - Objective-Cの同期に相当するものは何ですか?
目的cで同期されたJavaに相当するものは何ですか? シングルトン メソッドを安全にしたいので、2 つの異なるスレッドから呼び出されると、1 つずつ使用しようとします。
java - データをディスクにフラッシュするために MappedByteBuffer.force() を使用する必要がありますか?
ファイルの読み取り/書き込み操作を高速化するためにMappedByteBufferを使用しています()。以下のような私の質問:
.force() メソッドを使用してコンテンツをディスクにフラッシュする必要があるかどうかはわかりません。.force() がなくても、.getInt() は完全に機能するようです (まあ、これはメモリにマップされたバッファなので、.getInt() がディスクからデータをフェッチすると仮定します。つまり、データがフラッシュされたことを意味します)。ディスクはすでに。
.force() メソッドはブロッキング メソッドですか?
ブロッキング メソッドは同期ブロックですか?
.force() メソッドを呼び出すかどうかにかかわらず、パフォーマンスに大きな違いがあります。.force() を手動で呼び出す利点は何ですか? どのような状況で使用する必要がありますか? 呼び出さなくても、データはバックグラウンドでディスクに書き込まれると思います。
.force() を呼び出す必要がある場合、別のスレッドから呼び出すとパフォーマンスが向上しますか? 同期の問題が原因でデータが破損することはありますか?
import java.io.FileNotFoundException; import java.io.IOException; java.io.RandomAccessFile をインポートします。java.nio.MappedByteBuffer をインポートします。java.nio.channels.FileChannel をインポートします。import java.nio.channels.FileChannel.MapMode;
パブリック クラス メイン {
}
java - 同期の意義について
これはばかげた質問かもしれませんが、私は Java でのマルチスレッド プログラミングに慣れていません。各スレッドが配列の独自のコピーを維持しており、スレッドセーフでない動作はありません。この場合、同期を使用する意味は何ですか?(共有リソースへのアクセスを制御するために使用されると思いました。ここでは、配列は共有データ構造であるはずではありませんか?)
java - メソッド呼び出しを使用して同期オブジェクトを取得する Java 同期ブロック
私たちはいくつかのロック コードを書いていますが、奇妙な質問に遭遇しました。ロックする Object のインスタンスをフェッチするために ConcurrentHashMap を使用します。同期ブロックは次のようになります
ConcurrentHashMap の get メソッドをオーバーライドして、キーのオブジェクトが含まれていない場合に常に新しいオブジェクトを返すようにしました。
しかし、get-method がオブジェクトを返したが、スレッドがまだ同期ブロックに入っていない状態はありますか? 他のスレッドが同じオブジェクトを取得してロックできるようにします。
潜在的な競合状態がありました
- スレッド 1: キー A でオブジェクトを取得しますが、同期ブロックには入りません
- スレッド 2: キー A でオブジェクトを取得し、同期ブロックに入る
- スレッド 2: マップからオブジェクトを削除し、同期ブロックを終了します
- スレッド 1: マップに存在しなくなったオブジェクトで同期ブロックに入ります
- スレッド 3: キー A の新しいオブジェクトを取得します (スレッド 1 が取得したオブジェクトとは異なります)
- スレッド 3: 同期ブロックに入りますが、スレッド 1 もその同期ブロックにあり、両方ともキー A を使用します
get の呼び出しが返された直後に java が同期ブロックに入った場合、この状況は起こり得ません。そうでない場合、この競合状態を心配せずにキーを削除する方法について何か意見はありますか?
java - プロファイリング Java: スレッドがブロックされた時間を費やしている場所を見つけます
最初はスケーラビリティに優れたマルチスレッド アプリケーションを使用していますが、16 CPU サーバーで実行すると、ハードウェア スレッドが 5 または 6 を超えるとパフォーマンスが低下します。同期されたメソッドの 1 つがボトルネックになっているのではないかと思います。ただし、コードに飛び込んでアルゴリズムを非ブロッキングのものに置き換えようとする前に、それが有罪の方法であることを確認する必要があります。
-Xprof引数を指定して Java を実行すると、予想どおり、スレッドがブロックされた時間のほとんどを費やしていることがわかります。それを特定のメソッドでブロックされた時間に分解できる方法はありますか?
java - スレッド化、配列、キャッシュ メモリについて質問する
私は良い方法で願っています:-)私はこのコードを書きました。私がやりたかったのは、「キャッシュ」のようなものを構築することです。多くの呼び出しがそのクラスに到達する可能性があるため、さまざまなスレッドを監視する必要があると想定したため、ThreadLocal 機能を試しました。基本パターンには「VECTOR の多数のセット」があります。ベクターには次のようなものがあります。 VECTOR.FieldName = "X" VECTOR.FieldValue= "Y" セット内の非常に多くの Vector オブジェクト。異なるマシン、ユーザー、オブジェクトからの異なる呼び出しに対して異なるセット。
だから...私はそれを添付して、次のように使用します:
良い点: Bufferedline は、データ ファイルの区切り文字に基づいて分割された行です。ファイルは任意のサイズにすることができます。
では、このコードをどのように見ますか? 私は心配する必要がありますか?このメッセージのサイズについてお詫び申し上げます。
java - 揮発性を混合し、読み取り/書き込みロックとして同期
たくさんのスレッドを読み取り、いくつかのスレッドを書き込んでいるプリミティブ型の変数を考えてみましょう。次のコードは正しく機能しますか?
もしそうなら、それは1)よりも優れたパフォーマンスを提供しますか?すべてのメソッドで同期を宣言します。2)。明示的なReadWriteLockを使用していますか?
これは一般的なパターンですか?そうでない場合、この状況では通常どのようなパターンが使用されますか?
これは現在私にとっては問題なく機能しますが、揮発性と同期の両方を使用するのは少し冗長だと思います。
c# - SilverlightのSynchronizedCollection
コレクションが多数のスレッドによって安全にアクセスされることを確認する必要があります。そのためにSynchronizedCollection、私は.NETのプロジェクトで使用しました。現在、Silverlightプロジェクトを扱っていますが、同じ問題に直面しています。コレクションはスレッドセーフである必要があります。
SynchronizedCollectionこれはSilverlightでは利用できないと思います。目標を達成するためのアプローチは何ですか?
Silverlightと.NET4.0の両方に適用できるソリューションはありますか?
返信と手がかりを事前に感謝します!
乾杯