倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Groovy で Initialization On Demand Holder パターン

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Initialization On Demand Holder パターン。 このパターンは static フィールドの遅延初期化 (lazy initialization) に用います。

参考 URL

サンプル・コード その1


サンプル・コードは以下のようになります:

class MySystem {
    
    private static class Holder{
        static MySystem INSTANCE = new MySystem()
    }
    
    static MySystem getInstance(){
        return Holder.INSTANCE
    }
}
  • サブクラス MySystem.Holder は最初に getInstance() メソッドでアクセスされる際にクラスがロードされ、初期化されます。 なので遅延初期化になってます。
  • static フィールドの場合は volatile 宣言は不要です。

サンプル・コード その2


次は Groovy の @Lazy アノテーションを用いたサンプル:

class GroovyMySystem {
    @Lazy static GroovyMySystem INSTANCE = new GroovyMySystem()
}

前回の Double-checked Locking パターンとは static フィールドという点だけが異なります。 static フィールドの場合は Initialization on Demand Holder パターンのコードに AST 変換されます。 volatile 宣言は不要です。

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編


プログラミングGROOVY

プログラミングGROOVY