在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();
}
對我來說這看起來很好,什麼讓你煩惱? –
我知道,除非您真的採取正確的步驟來確保它是正確的,否則併發不是您所惹惱的。 –
這裏顯示的示例代碼是一個雙重ckecked鎖定,並且是不正確的做法,如http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html –