内のロックに同期使用することから、ロックダブルチェックを変換するJAVA 8にキーワードを使用してロックする次のコード実行のダブルチェックを考えてみましょう:はJAVA
private static void redoHeavyInitialisation() {
if (needToReinitialise()) {
synchronized (MyClass.class) {
if (needToReinitialise()) {
doHeavyInitialisation();
}
}
}
}
初期化が重いので、ダブルチェックロックが使用されている理由は、 (したがって、怠け者)、それは複数回起こることがあります(したがって、シングルトンパターンは使用できません。私が間違っていれば修正してください)。
まず、synchronizedキーワードを使用する代わりに、上記のコードをLock
を使用してJAVAの同時パッケージからどのように変換しますか?
その後、オプションで、Lockまたはsynchronizedキーワードを使用してコメントすることもできます。
この質問はロックと同期の比較に関するものではありません。コード変換部分に応答しない回答の試みは、受け入れられた回答として選択されません。
可能な重複(http://stackoverflow.com/questions/4201713/synchronization-vs-lock)を実装して延び –
@ErwinBolwidtはい、あなたが比較に集中し、この質問を完全に無視して、主要な質問である同等のコード変換を求めるならば。あなたがしたいと思っていない場合は比較にコメントする必要はありませんが、コードの変換をしてください。 – user1589188
シングルトンを使用できます。考えられるアーキテクチャの1つは、初期化と再開始の同期メソッドを持つSingleton HeavyInitializerクラスを作成することです。 – Chocksmith