Avere connessioni persistenti non implica che tutti i thread utilizzino la stessa connessione. Dice semplicemente che mantieni la connessione aperta (in contraddizione per aprire una connessione ogni volta che ne hai bisogno). L'apertura di una connessione è un'operazione costosa, quindi - in generale - si cerca di evitare di aprire le connessioni più spesso del necessario.
Questo è il motivo per cui le applicazioni multithread utilizzano spesso pool di connessioni. Il pool si occupa dell'apertura e della chiusura delle connessioni e ogni thread che necessita di una connessione ne richiede una dal pool. È importante fare in modo che il thread restituisca la connessione al pool il prima possibile, in modo che un altro thread possa utilizzarlo.
Se la tua applicazione ha solo pochi thread di lunga durata che richiedono connessioni, puoi anche aprire una connessione per ogni thread e mantenerla aperta.
L'utilizzo di una sola connessione (come l'hai descritto) equivale a un pool di connessioni con la dimensione massima. Questo prima o poi sarà il tuo collo di bottiglia poiché tutti i thread dovranno attendere la connessione. Questa potrebbe essere un'opzione per serializzare le operazioni del database (eseguirle in un certo ordine), sebbene ci siano opzioni migliori per garantire la serializzazione.