diff --git a/examples/src/TcpExamples/TcpExample4DispatchServer.java b/examples/src/TcpExamples/TcpExample4DispatchServer.java
new file mode 100644
index 0000000000000000000000000000000000000000..d889c89002b2663d85764ec45a88b4e9495c0388
--- /dev/null
+++ b/examples/src/TcpExamples/TcpExample4DispatchServer.java
@@ -0,0 +1,64 @@
+package TcpExamples;
+
+import java.io.IOException;
+import java.net.*;
+
+/**
+ * This server program works a bit differently by creating and dispatching a
+ * new thread to handle multiple incoming socket connections, one after another, all running in parallel.
+ * This advanced technique is often used in high=performance high=capacity server programs.
+ * 
+ * @see TcpExample4Client
+ * @see TcpExample4HandlerThread
+ *
+ * @see <a href="../../../src/TcpExamples/TcpExample4TerminalLog.txt" target="blank">TcpExample4TerminalLog.txt</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample4SequenceDiagram.png" target="blank">TcpExample4SequenceDiagram.png</a>
+ * @see <a href="../../../src/TcpExamples/TcpExample4SequenceSketch.png" target="blank">TcpExample4SequenceSketch.png</a>
+ *
+ * @author Don McGregor
+ * @author Don Brutzman
+ * @author MV3500 class
+ */
+public class TcpExample4DispatchServer
+{
+    /** Default constructor */
+    public TcpExample4DispatchServer()
+    {
+        // default constructor
+    }
+    /**
+     * Program invocation, execution starts here
+     * @param args command-line arguments
+     */
+    public static void main(String[] args)
+    {
+        try {
+            ServerSocket serverSocket = new ServerSocket(2317);
+            TcpExample4HandlerThread handlerThread;
+            Socket clientConnection;
+
+            int connectionCount = 0; // state variable
+
+            System.out.println(TcpExample4DispatchServer.class.getName() + " ready to accept socket connections...");
+            while (true) // infinite loop
+            {
+                clientConnection = serverSocket.accept(); // block until connected
+
+                connectionCount++; // unblocked, got another connection
+                System.out.println("=============================================================");
+                System.out.println(TcpExample4DispatchServer.class.getName() + ".handlerThread invocation for connection #" + connectionCount + "...");
+                handlerThread = new TcpExample4HandlerThread(clientConnection);
+                handlerThread.start(); // invokes the run() method in that object
+                System.out.println(TcpExample4DispatchServer.class.getName() + ".handlerThread is launched, awaiting another connection...");
+            }
+        } catch (IOException e) {
+            System.out.println("Problem with " + TcpExample4DispatchServer.class.getName() + " networking:"); // describe what is happening
+            System.out.println("Error: " + e);
+            // Provide more helpful information to user if exception occurs due to running twice at one time
+            if (e instanceof java.net.BindException) {
+                System.out.println("*** Be sure to stop any other running instances of programs using this port!");
+            }
+        }
+        System.out.println("=============================================================");
+    }
+}