运行完成后线程结束了吗?

时间:2015-04-25 10:27:05

标签: java multithreading

我想知道当run方法结束时,java中的线程是否会自行关闭。

我的意思是,我有一个新的线程声明:

new Thread(new SubmitDataOnBackground(handler.getIDValue(), data, this.context)).start();

然后,在SubmitDataOnBackground中,我有这个运行方法:

public void run() {
    SubmitDataHandler submit = new SubmitDataHandler(ID, data, this.context);
    submit.buildAndSubmitData();

}

buildandSubmitData完成后,线程是否关闭,或者我必须在某处添加任何代码?

我不确定每次调用此方法时是否打开新线程,或者它没问题。

我的应用程序是一个服务器,因此它永远不会结束,因为它一直处于活动状态。我只是想知道线程的数量没有数量,因为它只是创建新的线程而不会在完成后关闭其他线程。

5 个答案:

答案 0 :(得分:5)

调用run方法后,线程会自行关闭。阅读本文以获取更多信息https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

编辑:如果您想避免此行为,我建议您使用ThreadPools。

答案 1 :(得分:2)

是的,当run()方法执行结束时,线程结束。您可以在一般here

中阅读有关线程和可靠性的更多信息

这里有一个提示 - 当使用多个线程一直启动和完成时,最好使用一个线程池。这是因为创建一个线程非常繁重。

答案 2 :(得分:2)

线程在完成作业后终止(当run()的执行结束时)。如果要查看,请使用isAlive()

答案 3 :(得分:0)

为了实际让Thread自身停止,这个过程非常简单。您需要做的就是让run方法用完并返回。

public void run(){

   // implement your code

   // Just about to return and the Thread will then stop soon after

}

注意在运行方法完成后,线程不一定会被立即声明完成,因为 Java虚拟机(JVM)仍然需要在背景,但它应该很快完全终止。

换句话说,当创建普通线程(也称为用户线程)时,预计它将完成其工作而不会永久关闭。 JVM 将在所有用户线程完成之前终止,或者在调用System.exit()方法之后才会终止,该方法会突然终止 JVM

编辑: System.exit()不会突然停止JVM,它会首先执行所有关闭挂钩。 Runtime.getRuntime().halt()在没有任何进一步处理的情况下停止JVM。

答案 4 :(得分:0)

是的,在run()方法完成指定的作业(指令序列)后,线程终止。 但是,已创建的线程对象仍然存在,允许您使用Thread.start()再次调用它来创建新线程。

如果您想在继续执行更多操作之前确保线程运行方法已结束,请尝试在使用线程的同一位置使用方法Thread.join()

阅读本文以获取更多相关信息:
https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join%28%29