在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 –