I don't know the answer to this question, but perhaps it's something that the ThreadPool class handles. Otherwise, I'd say you just create an array or list of the threads and check them all.
Now, considering that you have a while loop that is basically waiting for all the threads to complete, there may be a better way to do this.
I don't know the method off hand but there is a method on a thread that will block until the thread is completed. You could set up a regular for loop across all the thread instances, and call this method for each one. Regardless of which thread finishes first or last, the loop will wait until all the threads finish.
For example, for 10 threads (0-9), if the first loop takes the longest, the for loop will wait on i==0 then spin thru all the rest basically instantly after the first is done (because 1-9 are already finished). If the 5th thread finishes last then the loop will step thru 0 to 3 waiting for each of those to finish then wait on 4, then spin thru 5-9. In essence, the loop will check all threads, but wait on the first longest running one and "skip" waiting on the rest. This is how I have seen this type of thing done.
-Peter
compiledthoughts.com