Why did you use a Set to store the balls, why not a Vector?
I haent used the Iterator and stuff yet; Im guessing all it does it iterate, but then why couldnt you use a for loop to do that?
What is a hashtable?
Im not sure what wait, notify, notifyAll do except that wait causes the current Thread to wait in a ready state so that when another thread yields the CPU to it, it starts running again. I dont know how notify and notifyAll differ in what they do, because if notifyAll tells all waiting threads that it has yielded the CPU, then does notify send the same message to a particular thread?
Why do you need to code an interface when the interface only has a method declaration and not an implementation? Wouldnt class Ball that implements the method wakeUp() have done so even without implementing the Sleeper interface?