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();
+ }
+}