При создании потоков в основном потоке вы можете сохранить ссылку на них и получить данные по этим ссылкам. Псевдокод будет выглядеть так:
int nSize = <some nomber>;
MyThread myThreadArray[] = new MyThread[nSize];
for(int i = 0; i < nSize; i++) {
myThreadArray[i] = new MyThread();
// Init and start the thread.
}
// Wait for all thread to end.
for(int i = 0; i < nSize; i++) {
myThreadArray[i].getData();
}
Вместо массива фиксированного размера может использоваться любой тип List
.
Редактировать / Дополнение:
Вместо хранения данных в дочерних потоках, вы также можете разместить их в основном потоке и дать ссылку на них при создании дочернего потока:
int nSize = <some nomber>;
MyThreadData myThreadDataArray[] = new MyThreadData[nSize];
for(int i = 0; i < nSize; i++) {
Thread thread = new MyThread(myThreadDataArray[i]);
// Init and start the thread.
}
// Wait for all thread to end.
for(int i = 0; i < nSize; i++) {
// Do something with myThreadDataArray[i].
}
Это позволит gc быстрее восстанавливать объекты Thread
, если вам нужно работать с данными потока в течение длительного времени после завершения потока.