Você provavelmente também
- Abrir soquetes e não fechá-los. Com o tempo, o número de soquetes abertos fica muito grande e o aplicativo trava.
- Você está abrindo muitos soquetes ao mesmo tempo. Talvez porque você tenha muitos tópicos.
Eu vou adivinhar que é o número 1. Verifique seu código e certifique-se de fechar todos os seus objetos Connection e objetos ResultSet.
Se você está se deparando com o número 2, considere usar menos threads (após um certo ponto, ter muitos threads faz mais mal do que bem) ou usar um pool de conexões como c3p0 que apenas criará um número definido de conexões e permitirá que seus threads as compartilhem. Usar c3p0 é uma boa ideia em geral e também deve permitir que você detecte o nº 1 mais rapidamente.
Uma terceira opção é usar uma abstração de nível superior, como JPA ou JDO, que cuidará do gerenciamento de conexões para você.