Ho fatto il tuo stesso ragionamento e lo stavo per scrivere! Grazie ancora per la risposta!
p.s. ragionando mi è anche venuto in mente che join deve per forza far rilasciare i lock acquisiti dal thread in cui è chiamato il join sennò supponendo che il main ha il lock sull' oggetto "a" e il thread pincopallo su cui è eseguito il join ha bisogno del lock su "a" si avrebbe un' attessa circolare causata dal fatto che il thread chiede il lock su "a" che è tenuto dal main che non lo rilascerà mai perchè aspetta che il thread pincopallo finisca..
Spero di essermi spiegato bene