0

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

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...

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

4

5 回答 5

1

您只需要引用您的线程:

Thread t = new Thread(...);

然后你可以打断它:

t.interrupt();
于 2013-04-17T10:26:03.993 回答
1
Thread t = new Thread(){
      ... // content unchanged
};
t.start();
.....
t.interrupt();
于 2013-04-17T10:28:08.823 回答
0

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

于 2013-04-17T10:24:23.773 回答
0

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

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

如果您继续使用这样的线程,您将拥有极其不可维护和不可扩展的代码。

如何优雅地停止线程?

bool keepWorking = true;

while(keepWorking) {
  // keep working
}

synchronized void stopWork() {
  keepWorking = false;
}

// in other thread
threadObj.stopWork();
于 2013-04-17T10:26:38.103 回答
0

Thread.interrupt方法是停止一个等待很长时间的线程(例如,输入)

看看这篇文章 -如何停止线程或任务

例子


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

于 2013-04-17T11:02:28.333 回答