There are two things to consider about threads.
- Before and during running thread objects themselves are GC roots, that is: they and any objects strongly accessible from them can't be collected.
- Once a thread finishes running, it "reverts" to being an ordinary object. The same GC rules apply to them as to any other object. So for example while you have a strong reference to them, they won't be collected and yes, you can call methods on them without trouble.
So my advice is to treat "dead" threads like you would treat an object of type List
or Map
for example. What applies to them applies to threads that finished running.