2012-12-01 5 views
15

में आलसी प्रदायक को कार्यान्वित करना जावा में आलसी आपूर्तिकर्ता को लागू करने के लिए सही प्रतिमान या उपयोगिता वर्ग (एक पूर्ववर्ती वर्ग नहीं लग रहा है) क्या है?जावा

मैं कुछ ऐसा करना चाहता हूं जो गणना-एक बार/कैश-बाद के व्यवहार को संभालता है और मुझे स्वतंत्रता व्यवहार को स्वतंत्र रूप से निर्दिष्ट करने की अनुमति देता है। मैं जानता हूँ कि यह शायद एक त्रुटि है, लेकिन यह सही अर्थ विज्ञान है:

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

कोई आश्चर्य नहीं कि मुझे कक्षा नहीं मिल सका, यह एक स्थिर विधि है - धन्यवाद! –