This sleep would also be nice to replace with some kind of semaphore or shared state; at the very least have a static volatile threadsFinished variable (in some kind of static object) and do `while (threadsFinished < 4) { Thread.sleep(100) }`