Можно использовать Future. Ну или синхронизацию.
Кстати, для многопоточности надо использовать контейнеры, которые специально заточе.... А судя по приведённому коду, тебе нужно почитать литературу по многопоточности в java, а не спрашивать тут такие вещи. Тогда и таких вопросов не будет возникать.
Для этого существует очередь LinkedBlockingQueue.
Потоки пишут в нее возвращаемые значения, промаркированные id задания.
main читает из нее и восстанавливает массив возвращаемых значений по их id, не опираясь на порядок элементов в очереди, который ничем не гарантирован.
Используйте коллекции, как уже советовали выше, например очереди или Map'ы. Лучше использовать из пакета java.util.concurrent
Еще можно заюзать новый интерфейс Callable -