Vous êtes probablement soit
- Ouvrir les sockets et ne pas les fermer. Au fil du temps, le nombre de sockets ouverts devient trop important et l'application se bloque.
- Vous ouvrez beaucoup trop de sockets en même temps. Peut-être parce que vous avez une tonne de sujets.
Je suppose que c'est le n°1. Revérifiez votre code et assurez-vous de fermer tous vos objets Connection et ResultSet.
Si vous rencontrez #2, vous voudrez peut-être envisager d'utiliser moins de threads (après un certain point, avoir trop de threads fait plus de mal que de bien) ou d'utiliser un pool de connexions comme c3p0 qui ne créera qu'un nombre défini de connexions et permettra à vos fils de les partager. L'utilisation de c3p0 est une bonne idée en général et devrait également vous permettre de détecter #1 plus rapidement.
Une troisième option consiste à utiliser une abstraction de niveau supérieur telle que JPA ou JDO qui s'occupera de la gestion des connexions pour vous.