如何 - 线程停止

时间:2013-04-17 10:22:15

标签: java multithreading interrupt

只是一个小问题,我想改进以下主题,但我不知道应该怎么做。请帮我。谷歌帮助这次没用。

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

有人可以提供一个好的工作,阻止这个吗?

5 个答案:

答案 0 :(得分:1)

您只需要对线程的引用:

Thread t = new Thread(...);

然后你可以打断它:

t.interrupt();

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

如果你继续使用这样的线程,你将拥有一个非常难以维护和无法扩展的代码。

如何优雅地停止线程?

bool keepWorking = true;

while(keepWorking) {
  // keep working
}

synchronized void stopWork() {
  keepWorking = false;
}

// in other thread
threadObj.stopWork();

答案 4 :(得分:0)

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

看一下这篇文章 - How to Stop a Thread or a Task

例如


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