我无法完成线程(runnable),它是怎么回事?

时间:2012-10-16 07:10:51

标签: java multithreading concurrency runnable

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 个答案:

答案 0 :(得分:2)

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

  

stop的大多数用法应该由代码修改,该代码只是修改某个变量以指示目标线程应该停止运行。目标线程应该定期检查此变量,并且如果变量指示它将停止运行,则以有序的方式从其run方法返回。为确保快速通信停止请求,变量必须是易失性的(或者必须同步对变量的访问)。

interrupt()更适合阻止某些Thread等待某些东西,这可能不会再出现了。如果你想结束线程,最好让它的run()方法返回。

答案 1 :(得分:0)

创建一个布尔变量来停止线程并在while(boolean)而不是while(true)中使用它。

答案 2 :(得分:0)

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

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();
    }
}

答案 3 :(得分: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();
  }

}