Repaced the array of Threads with ExecutorService

I don't like the wait(! is terminated) call for executor service, so
maybe there's a better way of doing that.  Could try a CountdownLatch?
ExecutorService doesn't let us easily join on all of the threads.
Maybe try Java Future?