Java 结束类实例的正确方法?
在我的Android应用程序中,我有一个类扩展了Java 结束类实例的正确方法?,java,android,multithreading,Java,Android,Multithreading,在我的Android应用程序中,我有一个类扩展了线程,在建立了互联网连接(3G/WIFI)时运行 加载应用程序时,如果建立了internet连接,我将如下实例化该类: MyThread thread = new MyThread(); // (it calls its own start() method) 在线程中,如果连接丢失,我想销毁线程。我被告知不要运行finalize(),我如何销毁它以使thread==null为真 编辑:我问的原因是,稍后,我想重新启动线程以防连接返回,检查
线程
,在建立了互联网连接(3G/WIFI)时运行
加载应用程序时,如果建立了internet连接,我将如下实例化该类:
MyThread thread = new MyThread(); // (it calls its own start() method)
在线程中,如果连接丢失,我想销毁线程
。我被告知不要运行finalize()
,我如何销毁它以使thread==null
为真
编辑:我问的原因是,稍后,我想重新启动线程以防连接返回,检查
(thread==null)
是否容易。我可以使用一个标志来指示线程需要重新启动,或者检查它是否被中断。感谢您到目前为止提供的有用意见。通常,您不需要对线程进行子类化。您可以创建一个可运行的
,并将其传递给线程
对象,或者更好的是,传递给执行器服务
但是您不必担心线程完成后的清理,它将由垃圾收集器自动处理。如果您希望自己的本地引用为null,只需自己将其设置为null,或者更好的是,不要保留它
new Thread( new Runnable() {
public void run() {
// put your stuff here
}
} ).start();
试试这个
执行的线程将一直有效,直到它完成其run()方法的执行为止,然后
它要么移动到死状态
e,要么移动到线程池
中
最好使用布尔变量控制run()
方法
例如:
}.start()代码>
只要从线程返回,当连接丢失时,垃圾收集器就会处理它,在线程上调用interrupt()
。创建一个标志,并在线程运行时将其设置为true。当您希望停止时,只需将其设置为false。通过这种方式,您可以确保线程不会继续在后台运行。将其留给垃圾收集器。请记住,没有任何东西会为您将线程设置为null
。如果线程死亡时需要将其设置为null
,则需要处理该问题,并且只要thread
指向该线程,垃圾收集将不会处理该线程(即使已终止)。您不能简单地销毁该线程吗?它可以自己重试连接,并在返回时发出信号。多线程规则7-如果有任何方法可以避免在线程启动后终止/销毁线程,那么就使用它。没有GC,不知道线程是否存在,没有不可靠的终止代码,没有布尔值,没有停止标志轮询,没有麻烦。请注意,布尔标志需要同步以确保在两个线程中的可见性。
boolean isRunning = true;
new Thread(new Runnable()
{
public void run()
{
while(isRunning)
{
// Keep doing your work here....
if (!isRunning){
break;
}
}
}