В дополнение к другим ответам ... одна альтернатива «запустить два потока и дождаться окончания обоих» - это «запустить один поток и выполнить одну работу самостоятельно, затем подождать, пока другой поток не закончить».
Конечно, если вы хотите запустить два задания, сделайте еще немного работы с основным потоком и , а затем дождитесь завершения двух других потоков, что не очень хорошо работает.
РЕДАКТИРОВАТЬ: Если основной поток является потоком пользовательского интерфейса, вы не должны блокировать другие потоки, заканчивая - вы должны (IMO) заставить их перезвонить основному потоку после завершения. Таким образом, у вас все равно будет отзывчивый пользовательский интерфейс во время их выполнения.