关于java程序中线程生命的困惑

时间:2015-05-12 15:40:52

标签: java multithreading

我有一个方法,我开始一个线程并从方法返回..现在我不确定线程​​将在完成执行后继续在内存中的天气,或者它将在完成后释放内存。

这是我的方法:

@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);
}
}

所以我想在完成任务后询问天气会不会释放内存,因为我的方法会在完成之前返回。

1 个答案:

答案 0 :(得分:0)

是的,线程将在完成后销毁;资源将被释放。

当然,有人可能仍然持有Thread对象的引用(不是你的情况),并且在清除引用之前该对象不会被GC编辑。物体本身的重量不是很大,但它可能会引用其他物体,例如通过ThreadLocal,可能会留下更多的垃圾;它尤其是类卸载的问题。