diff options
Diffstat (limited to 'website/usageExamples/GetterLazyExample_post.jpage')
-rw-r--r-- | website/usageExamples/GetterLazyExample_post.jpage | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/website/usageExamples/GetterLazyExample_post.jpage b/website/usageExamples/GetterLazyExample_post.jpage new file mode 100644 index 00000000..5f34c43e --- /dev/null +++ b/website/usageExamples/GetterLazyExample_post.jpage @@ -0,0 +1,26 @@ +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; + } +} |