For #1, it depends. If you have a loop in your thread which runs many times, you could perform a check for a session variable at the start of each loop, and if it has a value of say "false" or "stop", then you exit the method.

#2, what he said.