0
Thread thread;     

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_yippi);  
final Handler hn=new Handler();
final TextView text=(TextView)findViewById(R.id.TextView01);
final Runnable r = new Runnable()
{
    public void run() 
    {
        text.settext("hi");
    }
};
thread = new Thread()
{

    @Override
    public void run() {
        try {
            while(true) {
                sleep(1750);
                hn.post(r);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
};
    thread.start();
thread.stop();}

代码在这里。我无法停止可运行线程。此外,thread.stop()并且thread.destroy()已弃用。有人可以帮助我吗?而且我不明白如何用该thread.interrupt()方法停止线程。怎么了?

4

4 回答 4

2

Thread.stop() 的 JavaDoc 列出了以下文章来解释为什么不推荐使用 stop():http: //docs.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html

停止的大多数用法应该由简单地修改一些变量以指示目标线程应该停止运行的代码替换。目标线程应该定期检查这个变量,如果变量指示它要停止运行,则以有序的方式从它的 run 方法中返回。为了确保停止请求的及时通信,变量必须是易失的(或对变量的访问必须同步)。

interrupt() 更适合阻止某些线程等待某事,这可能不再来了。如果要结束线程,最好让它的run()方法返回。

于 2012-10-16T09:25:37.547 回答
0

创建一个布尔变量来停止线程并使用它来while(boolean)代替while(true).

于 2012-10-16T07:19:02.177 回答
0

您可以使用 Thread.interrupt() 在您的线程中触发 InterruptedException。我在下面添加了代码来演示该行为。mainThread 是您的代码所在的位置,计时器线程仅用于演示延迟触发中断。

public class Test {

    public static void main(String[] args) {

        final Thread mainThread = new Thread() {

            @Override
            public void run() {
                boolean continueExecution = true;

                while (continueExecution) {
                    try {
                        sleep(100);
                        System.out.println("Executing");
                    } catch (InterruptedException e) {
                        continueExecution = false;
                    }
                }

            }
        };

        mainThread.start();

        Thread timer = new Thread() {
            @Override
            public void run() {

                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println("Stopping recurring execution");
                mainThread.interrupt();

            }
        };
        timer.start();
    }
}
于 2012-10-16T08:04:11.700 回答
0

您可以使用 Thread 的中断方法来尝试停止线程,如下面的代码。可能对你有用。

public class InterruptThread {

    public static void main(String args[]){

      Thread thread = new Thread()
      {

        @Override
        public void run() {
            try {
                while(true) {
                    System.out.println("Thread is Runing......");
                    sleep(1000);
                }
            } catch (InterruptedException e) {
                // restore interrupted status
                System.out.println("Thread is interrupting");
                Thread.currentThread().interrupt();
            }
        }
       };
      thread.start();

      try {
          Thread.sleep(5000);
      } catch (InterruptedException e) {
          e.printStackTrace();
     }

     System.out.println("Will Interrupt thread");
     thread.interrupt();
  }

}

于 2012-10-16T09:02:06.983 回答