Geralmente, quando algo é multithreaded, uma parte do trabalho é entregue a cada thread. Se o aplicativo quiser mostrar o progresso, ele precisará coletar o status de cada thread e mostrá-lo a você. Quanto mais refinado o detalhe, mais complexo o processo, e realmente não faz nada de bom para você em termos de velocidade, para fazer toda aquela comunicação interposta.
Em um único aplicativo encadeado, por outro lado, o trabalho pode ser descartado no console sempre que for necessário.
Para simplificar, os encadeamentos provavelmente só retornarão à interface do usuário quando terminarem um bloco de trabalho.