Using thread pools that supports multiple games simultaneously. Each game has it's own thread and the communication between the players is managed through the user of sockets. Utilizes client and servers where the client side holds the user interface (command line interface) and the server side implements the Runnable interface.
The server utilizes ServerSocket which waits for requests to come in over the network, and ExecutorService which is an interface that allows the execution of tasks on threads asynchronously.