为什么我们使用标志来停止线程?

时间:2015-04-01 13:52:38

标签: java multithreading

当我试图找出如何在具有多个线程的程序中停止线程时,
suggested调用一个方法来实际设置一个标志,告诉该线程停止做实际工作,如下所示:

public class ThreadTobeTerminated implements Runnable {

    private static final Logger LOGGER = LoggerFactory.getLogger(IndexProcessor.class);
    private volatile boolean running = true;

    public void terminate() {
        running = false;
    }

    @Override
    public void run() {
        while (running) {
            try {
                LOGGER.debug("Doing some real work ,like Counting...");
                for(int i=0;i<100;i++){}

            } catch (InterruptedException e) {
                LOGGER.error("Exception", e);
                running = false;
            }
        }

    }
}

当我想停止这一步时,我会打电话给threadInstance.terminate();

不要我真的要停止这个帖子吗?

为什么我应该让这个线程做一些无用的工作(调用方法run,测试标志running==false然后返回)?我的意思是:这是浪费时间,不是吗?

1 个答案:

答案 0 :(得分:1)

当执行范围超出run()方法时,线程停止,所以当while循环被破坏时,线程将停止。

如果情况需要,这也可以让你做一些清理工作:

public void run() {
    while (running) {
        try {
            LOGGER.debug("Doing some real work ,like Counting...");
            for(int i=0;i<100;i++){}

        } catch (InterruptedException e) {
            LOGGER.error("Exception", e);
            running = false;
        }           
    }
    //Clean up
}

上述方法允许您控制线程如何停止以及之后发生的事情,而不是可能只是杀死它,这可能会导致各种问题。