2012-12-01 9 views
15

Javaで怠惰なサプライヤを実装するための正しいパラダイムまたはユーティリティクラス(既存のクラスを見つけることができないようです)は何ですか?Javaで怠惰なサプライヤを実装する

コンピューティング/キャッシュ後の動作を処理し、計算の動作を個別に指定できるものが必要です。

abstract public class LazySupplier<T> implements Supplier<T> 
{ 
    private volatile T t; 
    final private Object lock = new Object(); 

    final public T get() { 
     if (t == null) 
     { 
      synchronized(lock) 
      { 
       if (t == null) 
        t = compute(); 
      } 
     } 
     return t; 
    } 
    abstract protected T compute(); 
} 
+1

それは私にはうまく見える、あなたを悩ますものは何ですか? –

+1

私は、正しいことを確かめるための正しい手順を取らない限り、並行性はあなたが混乱するものではないことを知っています。 –

+0

ここに示されているコード例は二重ロックです。http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html –

答えて

28

これはすでにSuppliers.memoize方法で実装されています。私は、これはおそらく、エラーを持っていますが、それは正しい意味を持って知っています。

+1

私はクラスを見つけることができませんでしたが、それは静的メソッドです - ありがとう! –

関連する問題