Uma perguntinha básica sobre threads: Quando a Thread esta no estado TERMINATED por concluir a execução do método run(), ela libera seus recursos para o Garbage Collector?
Os recursos relacionados ao SO, sim. Entretanto, se seu Runnable ainda possuir uma referência em algum lugar, alguns recursos desse runnable podem continuar presos. O mesmo vale para outros recursos onde um close seja necessário, tal como arquivos.
É bom sempre diferenciar a thread em si, do objeto que representa a thread (Runnable) e do objeto que dispara a thread (filho da classe Thread).
Certo, perguntei isto, porque estou utilizando Threads para controlar diversos sockets. As instâncias de MinhaThread são filhas de Thread. Cada uma possui variáveis como Connection e Thread.
Se ocorrer um timeout ou outras situações, o método run é terminado e o estado da thread é alterado para Terminated. E o método close para o socket e arquivos é invocado. Desta forma os recursos de arquivo e socket são liberados correto?
É algo importante, pois estes recursos podem ficar “pendurados” por um bom tempo até serem liberados.
Certo. O close está dentro de um finally?
Se o código simplesmente abortar, o GC até irá chamar o close cedo ou tarde, mas pode ser tarde demais. Só um finally pode garantir a execução imediata dos métodos.
Também é sempre bom usar um profiler e monitorar sua aplicação por um bom tempo, caso ela seja assim tão crítica.
sim, dentro de um finally. Isto dentro de um if / else para testar a condição do método run.
Obrigado pela ajuda.

Beleza. Você conhece o Visual VM? Em aplicações desse tipo, ele vale ouro:
http://java.sun.com/javase/6/docs/technotes/guides/visualvm/intro.html
https://visualvm.dev.java.net/
Não, nunca utilizei o visual vm.
O único programa que utilizei para visualizar a memória foi o jConsole que vem junto com a JDK. Mas com este temos apenas uma idéia em termos de memória utilizada, e Threads em execução.
Vou dar uma olhada neste dai, também vem com o JDK né.
Valeu a dica 