『増補改訂版 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言語で学ぶデザインパターン入門 マルチスレッド編
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/03/21
- メディア: 大型本
- 購入: 15人 クリック: 287回
- この商品を含むブログ (199件) を見る
- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (152件) を見る