我想知道 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();
}
构建和提交数据完成后,线程是自行关闭还是我必须在某处添加任何代码?
我不确定每次调用此方法时是否都会打开一个新线程,或者还可以。
我的应用程序是服务器,所以它永远不会结束,因为它一直处于活动状态。我只想知道线程的数量没有超过,因为它只是创建新线程而不会在完成后关闭其他线程。
线程在调用 run 方法后自行关闭。阅读此内容以获取更多信息 https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
编辑:如果你想避免这种行为,我建议使用ThreadPools。
,当方法执行结束时run()
线程完成。您可以在此处阅读有关线程和并发性的更多信息
这里有一个提示 - 当使用一直启动和完成的多个线程时,最好使用线程池。这是因为创建线程是一项相当繁重的操作。
完成其作业后终止(当run()
的执行结束时)。如果要检查,请使用 isAlive()
。
,线程在run()
方法中完成其指定的作业(指令序列)后终止。但是,已创建的 thread 对象仍然存在,允许您使用 Thread.start()
再次调用它以创建新的 Thread。
如果要确保线程运行方法在继续执行更多操作之前结束,请尝试在处理线程的同一位置使用方法Thread.join()
。
阅读此内容以获取有关此内容的更多信息:
https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join%28%29
为了真正使线程停止自身,该过程非常简单。您需要做的就是简单地让run
方法用完并返回。
public void run(){
// implement your code
// Just about to return and the Thread will then stop soon after
}
请注意,线程不一定会在 run 方法完成后立即声明完成,因为 Java 虚拟机 (JVM) 仍然需要在后台完成它,但它应该在不久之后完全终止。
换句话说,当创建普通线程(也称为用户线程)时,预计它将完成其工作,而不是永久关闭。在所有用户线程完成之前,或者直到调用 System.exit()
方法(这会突然终止 JVM),JVM 才会终止。
编辑:System.exit()
不会突然停止JVM,它会先执行所有关闭钩子。 Runtime.getRuntime().halt()
停止 JVM,而不进行任何进一步处理。