销毁/停止线程

时间:2016-09-30 12:32:40

标签: java multithreading

关于2,我有Thread个问题,我只想澄清一些问题。使用以下代码:

public class MyThread implements Runnable {

    Boolean StopThread = false;
    Boolean DontLoop = false;
    public MyThread(){}

    public void Stop(Boolean stopThread){
        this.StopThread = stopThread;
    }

    public void ThreadDontLoop(Boolean dontLoop){
        this.DontLoop = dontLoop;
    }

    public void run(){
        if(dontLoop){
            while(true){
                if(StopThread){
                    break; //Terminate WhileLoop, This will Stop and destroy the Thread also
                }
            }
        }else{
            //Does this mean the Thread will be destroy/terminate after this condition?
        }
    }
}

为了开始:

MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();

为了启动线程但不要循环

ThreadDontLoop(false);
thread.start();

为了停止线程

myThread.Stop(true);

现在,根据这个LINK,该线程是如何停止的。

所以我的第一个问题是,在上面的给定代码中,如果我调用ThreadDontLoop(false);然后调用thread.start();,这是否意味着线程将启动但是在条件之后,线程将被停止并销毁?

第二个问题是,让我们说我呼叫thread.start();然后我叫myThread.Stop(true);来停止WhileLoop并销毁线程。 我没有跟踪链接如何停止线程因为我将有不同的条件,但我相信我想如何停止线程的逻辑是正确的?

1 个答案:

答案 0 :(得分:1)

您需要volatile boolean或者可以内联该值,并且似乎永远不会更改。

  

在上面的给定代码中,如果我调用ThreadDontLoop(false)该怎么办;然后thread.start();,这是否意味着线程将启动但在条件之后,线程将被停止并销毁?

  

假设我调用thread.start();然后我调用myThread.Stop(true);停止WhileLoop并销毁线程。我没有跟踪链接是如何停止线程的,因为我会有不同的条件,但我相信我想如何停止线程的逻辑是正确的?

如果您没有可见性问题(线程是否看到您的更改),它将停止。在您在问题中的代码中,很可能代码将被优化以假设线程永远不会看到更改。