Sorry, I hope this doesn't double post. I had a connection problem...
When you use wait(); then you are calling the wait(); on the current Object. Are all your Runnables exactly the same instance of the Runnable? If not, then you can not notify them. Also are you sure the ArrayList is growing the way you expect it to? Maybe you are working with the wrong list?
Assuming you indeed have the proper ArrayList, but are using different instances of the Runnable,
you should synchronize, wait(), and notify() on the ArrayList itself, since that would be shared between all threads.
However, I suggest you use the
java.util.concurrent.CountDownLatch instead. The CountDownLatch will handle the synching and notifying for you, and is easier to read/maintain:
Note that I did not add any error handling, so make sure you add all the necessary try/catch statements.