2012-12-01 4 views
15

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

여기에 표시된 예제 코드는 이중 ckecked 잠금이며 http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html –

답변

28

이 이미 Suppliers.memoize 방식으로 구현된다.

+1

클래스를 찾을 수 없다는 것은 이상한 일이 아닙니다. 정적 메소드입니다. - 감사합니다! –