我想知道当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完成后,线程是否关闭,或者我必须在某处添加任何代码?
我不确定每次调用此方法时是否打开新线程,或者它没问题。
我的应用程序是一个服务器,因此它永远不会结束,因为它一直处于活动状态。我只是想知道线程的数量没有数量,因为它只是创建新的线程而不会在完成后关闭其他线程。
答案 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