Java

lombok @Getter(lazy=true)

2020-04-27  本文已影响0人  愤怒的老照

@Getter(lazy=true)

注意:Lombok 会自动去管理线程安全的问题,所以不会存在重复赋值的问题。

使用注解:

// 使用注解
public class GetterLazyExample {
    @Getter(lazy=true) private final double[] cached = expensive();
 
    private double[] expensive() {
        double[] result = new double[1000000];
        for (int i = 0; i < result.length; i++) {
            result[i] = Math.asin(i);
        }
        return result;
    }
}

不使用注解

public class GetterLazyExample {
    private final java.util.concurrent.AtomicReference<java.lang.Object> cached =
            new java.util.concurrent.AtomicReference<java.lang.Object>();
 
    public double[] getCached() {
        java.lang.Object value = this.cached.get();
        if (value == null) {
            synchronized(this.cached) {
                value = this.cached.get();
                if (value == null) {
                    final double[] actualValue = expensive();
                    value = actualValue == null ? this.cached : actualValue;
                    this.cached.set(value);
                }
            }
        }
        return (double[])(value == this.cached ? null : value);
    }
 
    private double[] expensive() {
        double[] result = new double[1000000];
        for (int i = 0; i < result.length; i++) {
            result[i] = Math.asin(i);
        }
        return result;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读