2013-04-17 185 views
0

只是一个小问题,我想stiop以下螺纹的,但我不知道我应该怎么做。请帮帮我。谷歌帮助这次没有用。HowTo-线程停止

new Thread(){ 
    public void run() { 
     while(!isInterrupted()){ 
      try { 
       if (sock1!=null){ 
        sock1.setTcpNoDelay(true); 
        if (btsar1.length > 0) { 
         dos1 = new DataOutputStream(sock1.getOutputStream()); 
         bwrtr1 = new BufferedWriter(new OutputStreamWriter(
           dos1), 300); 
         dos1.write(btsar1); 
          set1free = false; 
        Log.e("Communication", "written(1.1)"); 
         Reader1.reader(4);} 
        }} catch (IOException e) { 
        e.printStackTrace(); 
       }catch (NullPointerException e2){ 
        e2.printStackTrace(); 
       } 
      } 
}}.start(); 
//.interrupt(); <-- or kinda that... 

有人可以提供一个好工作的东西,阻止这种情况吗?

+3

* “请帮助我。” *请正确拼写单词。这不是一条短信。 –

+0

对不起,我的错......我有点着急^^ – Ekonion

+0

可能的http://stackoverflow.com/questions/10961714/how-to-properly-stop-the-thread-in-java – Ankit

回答

0

终止线程最好的办法就是让它完成。因此,在您的while中添加一个布尔标志,并且使方法(或其他方法)公开它,以便它可以设置为false。然后你的线程会在交互完成后自然退出。

1

你只需要一个参考你的线程:

Thread t = new Thread(...); 

然后你就可以中断它:

t.interrupt(); 
0

一个想法:停止使用匿名线程

每当发现自己处于线程正在做一些复杂事情的情况时,可以创建一个单独的类来扩展线程,该线程可用于控制和监视行为,或使用抽象Future和ThreadPool来执行工作。

,如果你继续使用类似这样的主题您将有一个非常难以维护和unextendable代码。

如何优雅地停止一个线程?

bool keepWorking = true; 

while(keepWorking) { 
    // keep working 
} 

synchronized void stopWork() { 
    keepWorking = false; 
} 

// in other thread 
threadObj.stopWork(); 
+0

他的做法是:'while(!interrupted)'比引入一个额外的不必要的布尔标志更好。尤其是使用可中断的I/O方法。 – assylias

+0

线程名称在另一个活动中给出,它从中被调用 – Ekonion

1
Thread t = new Thread(){ 
     ... // content unchanged 
}; 
t.start(); 
..... 
t.interrupt(); 
0

Thread.interrupt方法是停止这种等待很长时间(例如,用于输入)

看看这条线程 - How to Stop a Thread or a Task

示例


public void stop() { 
      Thread moribund = waiter; 
      waiter = null; 
      moribund.interrupt(); 
     }