ダブルチェックロックについて質問があります。この例を考えてみましょう。
public class Singleton {
private static volatile Singleton instance = null;
public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance ;
}
}
私が理解したように、上記のコードはシングルトンクラスを作成する正しい方法です。
ただし、NetBeansは外部のifステートメントを削除するように要求しているため、次のようになります。
public class Singleton {
private static volatile Singleton instance = null;
public static Singleton getInstance() {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
return instance ;
}
}
これら2つのスニペットの唯一の違いは、2番目の例では、コードは常に同期ブロックに入り、最初の例では入りません。NetBeansをリッスンし、外部のifステートメントを削除するのはなぜですか?ロックを回避する方がよいはずです。