Molto probabilmente lo sei anche tu
- Aprire le prese e non chiuderle. Nel tempo il numero di socket aperti diventa troppo grande e l'applicazione si arresta in modo anomalo.
- Stai aprendo troppi socket contemporaneamente. Forse perché hai un sacco di discussioni.
Immagino sia il numero 1. Ricontrolla il tuo codice e assicurati di chiudere tutti gli oggetti Connection e gli oggetti ResultSet.
Se stai incontrando il numero 2, potresti prendere in considerazione l'utilizzo di meno thread (dopo un certo punto avere troppi thread fa più male che bene) o l'utilizzo di un pool di connessioni come c3p0 che creerà solo un determinato numero di connessioni e consentirà ai tuoi thread di condividerle. L'uso di c3p0 è una buona idea in generale e dovrebbe anche consentire di rilevare il numero 1 più velocemente.
Una terza opzione consiste nell'utilizzare un'astrazione di livello superiore come JPA o JDO che si occuperà della gestione della connessione per te.