Java 结束类实例的正确方法?

Java 结束类实例的正确方法?,java,android,multithreading,Java,Android,Multithreading,在我的Android应用程序中,我有一个类扩展了线程,在建立了互联网连接(3G/WIFI)时运行 加载应用程序时,如果建立了internet连接,我将如下实例化该类: MyThread thread = new MyThread(); // (it calls its own start() method) 在线程中,如果连接丢失,我想销毁线程。我被告知不要运行finalize(),我如何销毁它以使thread==null为真 编辑:我问的原因是,稍后,我想重新启动线程以防连接返回,检查

在我的Android应用程序中,我有一个类扩展了
线程
,在建立了互联网连接(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;
                        }
    
    
                  }
    
      }