【问题标题】:How to terminate a running loop in java?如何终止java中的正在运行的循环?
【发布时间】:2014-12-03 06:15:58
【问题描述】:

程序 A:

    public void startThreadPool2(boolean flag) {
    while(flag) {
        Runnable run = new Runnable() {
            @Override
            public void run() {
                System.out.println("running");
            }
        };
        service.execute(run);
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

程序 B:

    public static void main(String[] args) {
    SentimentAnalyse sentimentAnalyse = SentimentAnalyse.getInstance();
    sentimentAnalyse.startThreadPool2(true);
}

程序 C:

public static void main(String[] args) {
    //how to stop the while loop
}

while 循环一直在运行,我不知道如何在另一个程序中停止它。

//更新 你的方法可能都行得通,我发现我的单例不起作用,因为 eclipse 在不同的程序中使用了不同的类加载器。

【问题讨论】:

  • flag 是按值传递的,因此循环将永远运行或根本不运行。另外,while (flag) { if (flag == false) break; ... } 是多余的。
  • 不清楚你在程序 C 中指的是什么循环。
  • 在程序B调用的A中停止while循环。我不知道如何准确解释这些。也许我们可以说停止程序 B 或停止程序 A 中的 while 循环。
  • 标志无关紧要。你可以认为是while(true)。
  • 这个循环是否与程序C的main方法在同一个线程中执行?

标签: java exit terminate


【解决方案1】:

将标志存储在 SentimentAnalyse 中并为其提供设置器! 在 porgram c(不管它是什么)中,您需要一个对 SentimentAnalyse 实例的引用,它是您在程序 b 中创建的。通过从程序 c 调用它的设置器来停止程序 a 中的循环

【讨论】:

  • 好像不行。我可以使用 Singleton 找到相同的实例。在程序 B 中,它使用 while(true) 调用 startThreadPool2()。如果我在 C 中设置标志,这意味着用 while(false) 调用 startThreadPool2(),什么也没有发生。我们可以找到相同的实例,但找不到方法。
猜你喜欢
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2018-08-12
相关资源
最近更新 更多