线程在运行完成时结束



我想知道 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,而不进行任何进一步处理。

最新更新