Java 一旦这个线程完成,它在最后运行时会发生什么情况?
我有一个从服务器下载一些图像的线程。因此,一旦它下载了图像,我就调用处理程序并进行UI更新。因此,由于thread的stop()已被弃用,我无法使用它。我这里有两个问题Java 一旦这个线程完成,它在最后运行时会发生什么情况?,java,android,multithreading,android-handler,Java,Android,Multithreading,Android Handler,我有一个从服务器下载一些图像的线程。因此,一旦它下载了图像,我就调用处理程序并进行UI更新。因此,由于thread的stop()已被弃用,我无法使用它。我这里有两个问题 这个线程到底发生了什么?(意思是在我调用handler方法之后它发生了什么) 或者如何在不使用stop()的情况下停止此线程 这是我的密码 handler=new Handler() { public void handleMessage(Message msg) {
handler=new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what==0)
{
//UI Updation takes place.
}
}
};
final Thread t = new Thread(new Runnable() {
public void run() {
Log.i("Inside Thread", "Downloading Images...");
myDownlaodMethod();
handler.sendEmptyMessage(0);
}
});
t.start();
线程将结束并自行消亡。你不必自己结束它。如果不创建新的
线程
对象,您将无法重新启动它。垃圾收集器将处理任何需要释放的内存。只要您持有对该对象的引用,该对象就会保留在内存中。删除引用,垃圾收集器将像删除其他对象一样删除该对象。您应该查看和
如果它与普通java相同,那么它提供了一些强大的线程管理,包括同时关闭所有线程。如何在Android中执行如果它有一个永久循环,则必须有一个布尔条件,如
,而(a){//do everything}
,并在希望它死亡时将a
设置为false。如果您的myDownloadMethod()
无法被中断和取消,那么您必须创建一个或有一个超时,让它死掉。你不应该只在执行的过程中切断一个线程。最佳实践是让它一直运行到最后。通常,您可以使用Thread.interrupt()
来实现此目的。感谢您的澄清。@DeeV查看ExecutorService和Executors。我经常看到开发人员重新实现这些类所做的事情。这看起来可能会对此有所帮助。这可能是AsyncTask
所包含的内容,因为它的工作原理类似。他使用的是Android,所以AsyncTask可能比执行器更合适。按照您的建议,使用interrupt
关闭线程并不简单,因为必须修改线程才能正确处理中断。@totototo2是的,我同意。然而,任何东西都比普通的线好。你应该用AsyncTask发布一个答案(当时我还不知道)。