From e7f0956a89356e1f841c045bd2b94ae20cafac9c Mon Sep 17 00:00:00 2001 From: Matt Lagrotte Date: Mon, 26 Feb 2018 14:29:58 -0500 Subject: [PATCH] Add LazyLambdaSingleton example --- javapatterns.iml | 6 +- pom.xml | 30 +++++----- .../lazylambda/LazyLambdaSingleton.java | 24 ++++++++ .../lazylambda/LazyLambdaSingletonClient.java | 60 +++++++++++++++++++ 4 files changed, 101 insertions(+), 19 deletions(-) create mode 100644 src/main/java/org/abqjug/javapatterns/singleton/lazylambda/LazyLambdaSingleton.java create mode 100644 src/main/java/org/abqjug/javapatterns/singleton/lazylambda/LazyLambdaSingletonClient.java diff --git a/javapatterns.iml b/javapatterns.iml index dfa9d29..9d2270e 100644 --- a/javapatterns.iml +++ b/javapatterns.iml @@ -1,9 +1,8 @@ - + - @@ -13,5 +12,4 @@ - - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index db4b01d..e5ce7c7 100644 --- a/pom.xml +++ b/pom.xml @@ -12,8 +12,8 @@ maven-compiler-plugin - 1.6 - 1.6 + 1.8 + 1.8 -proc:none @@ -21,25 +21,25 @@ org.apache.maven.plugins maven-javadoc-plugin - 1.6 - true + 1.8 + gr.spinellis.umlgraph.doclet.UmlGraphDoc gr.spinellis UmlGraph 4.6 - - -inferrel - -inferdep - -quiet - -constructors - -visibility - -types - -postfixpackage - -nodefontsize 9 - -nodefontpackagesize 7 - + + + + + + + + + + + diff --git a/src/main/java/org/abqjug/javapatterns/singleton/lazylambda/LazyLambdaSingleton.java b/src/main/java/org/abqjug/javapatterns/singleton/lazylambda/LazyLambdaSingleton.java new file mode 100644 index 0000000..f47cfdd --- /dev/null +++ b/src/main/java/org/abqjug/javapatterns/singleton/lazylambda/LazyLambdaSingleton.java @@ -0,0 +1,24 @@ +package org.abqjug.javapatterns.singleton.lazylambda; + +import com.google.common.base.Supplier; + +/** + * User: Matt Lagrotte (matt@lagrotte.net) + * Date: 2/26/18 + * Time: 2:00 PM + */ +public class LazyLambdaSingleton { + + private static LazyLambdaSingleton instance = null; + + private static Supplier singletonSupplier = () -> + { + instance = new LazyLambdaSingleton(); + singletonSupplier = () -> instance; + return instance; + }; + + public static LazyLambdaSingleton getInstance() { + return singletonSupplier.get(); + } +} \ No newline at end of file diff --git a/src/main/java/org/abqjug/javapatterns/singleton/lazylambda/LazyLambdaSingletonClient.java b/src/main/java/org/abqjug/javapatterns/singleton/lazylambda/LazyLambdaSingletonClient.java new file mode 100644 index 0000000..58dc6a9 --- /dev/null +++ b/src/main/java/org/abqjug/javapatterns/singleton/lazylambda/LazyLambdaSingletonClient.java @@ -0,0 +1,60 @@ +package org.abqjug.javapatterns.singleton.lazylambda; + +/** + * User: Matt Lagrotte (matt@lagrotte.net) + * Date: 2/26/18 + * Time: 2:00 PM + */ +public class LazyLambdaSingletonClient { + public static class SingletonRunner implements Runnable { + private LazyLambdaSingleton instance; + + public LazyLambdaSingleton getInstance() { + return instance; + } + + public void run() { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + instance = LazyLambdaSingleton.getInstance(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + } + } + + + public static void main(String[] args) throws InterruptedException { + SingletonRunner runner1 = new SingletonRunner(); + SingletonRunner runner2 = new SingletonRunner(); + SingletonRunner runner3 = new SingletonRunner(); + SingletonRunner runner4 = new SingletonRunner(); + + Thread t1 = new Thread(runner1); + Thread t2 = new Thread(runner2); + Thread t3 = new Thread(runner3); + Thread t4 = new Thread(runner4); + + t1.start(); + t2.start(); + t3.start(); + t4.start(); + + t1.join(); + t2.join(); + t3.join(); + t4.join(); + + assert runner1.getInstance() == runner2.getInstance(); + assert runner2.getInstance() == runner3.getInstance(); + assert runner3.getInstance() == runner4.getInstance(); + assert runner4.getInstance() == runner1.getInstance(); + assert runner2.getInstance() == runner4.getInstance(); + assert runner3.getInstance() == runner1.getInstance(); + } +}