我有一个方法,我开始一个线程并从方法返回..现在我不确定线程将在完成执行后继续在内存中的天气,或者它将在完成后释放内存。
这是我的方法:
@RequestMapping(value = "/testThread", method = RequestMethod.GET)
public @ResponseBody JSON_Response testThread(
@PathParam("name") String name) {
JSON_Response response = null;
try {
System.out.println("name is"+name);
response = new JSON_Response();
response.setStatusCode(name);
TestThread mst = new TestThread(name);
mst.start();
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
这是我的Thread类
public class TestThread extends Thread{
public String inputJSON;
public static int myCount = 0;
public TestThread(String inputJSON) {
super();
this.inputJSON = inputJSON;
}
public void run(){
try{
System.out.println("Expl Thread: "+(++TestThread.myCount));
Thread.sleep(100);
} catch (InterruptedException iex) {
System.out.println("Exception in thread: "+iex.getMessage());
}
finally{
printname(inputJSON);
}
}
public void printname(String name){
System.out.println(name);
}
}
所以我想在完成任务后询问天气会不会释放内存,因为我的方法会在完成之前返回。
答案 0 :(得分:0)
是的,线程将在完成后销毁;资源将被释放。
当然,有人可能仍然持有Thread
对象的引用(不是你的情况),并且在清除引用之前该对象不会被GC编辑。物体本身的重量不是很大,但它可能会引用其他物体,例如通过ThreadLocal,可能会留下更多的垃圾;它尤其是类卸载的问题。