Implement your algorithm in Java.
Discuss your implementation. For example, describe how the problem was
broken down into classes, discuss the relationship amongst classes,
motivate the choice of the key data structures used, discuss where you
use synchronized or volatile, etc.
Test your algorithm.
Describe your tests and the results you obtained.