non mi tornano i conti: se un metodo fa un return, significa che ritorna, quindi se fai una cosa dopo il return del padre, il padre ha terminato, dipende da come hai avviato i thread e se il thread padre è il principale, tutti i figli terminano.
Non mi torna anche usare thread, ma sincronizzarli alla terminazione di uno...boh, forse non avendo il quadro di insieme non so bene cosa pensare, ma in quello che hai fatto c'è qualcosa che non mi torna.
Produttore/consumatore richiede che entrambi sono in esecuzione contemporaneamente, altrimenti è una sequenza e i thread ti portano solo un overhead non necessario

Rispondi quotando