【问题标题】:Thread not stopping线程不停止
【发布时间】:2013-12-31 21:16:14
【问题描述】:

所以我有一个线程,在那个线程中我声明了一个布尔值,如下所示:

volatile boolean stopThread = false;

然后在我的线程中看起来像这样:

public void run() {

    while (!stopThread) {

        while (i < list.size()) {
            System.out.println(list.get(i));
        }

    }

}

线程是这样启动的:

t1 = new CheckThread();
t2 = new CheckThread();

一切正常,但我想让用户停止线程,所以我创建了一个按钮并添加了以下两行:

t1.stopThread = true;
t2.stopThread = true;

但是当我单击按钮时,线程仍然运行。我也尝试了以下

CheckThread.stopThread = true;

但这也不起作用。 为什么我的线程没有停止?

编辑:

我这样开始我的线程。我有一个类,在任何方法之外我都有这两个变量

CheckThread t1;
CheckThread t2;

点击按钮后,我会执行以下操作

t1 = new CheckThread();
t2 = new CheckThread();

t1.start();
t2.start();

我知道线程正在运行,因为我在线程中有一个打印语句。

【问题讨论】:

  • 你尝试调试了吗?
  • 首先从 stopThread 声明中删除 static 关键字。那应该是一个实例变量。
  • 我已经删除了 static 关键字,线程仍然没有停止。
  • 显然发生了其他事情。发布你如何开始和停止你的线程。也发布实际的 while 循环。
  • 你怎么知道你的线程没有停止,它在做什么?

标签: java multithreading


【解决方案1】:

必须做的是在第二个 while 循环中添加另一个条件,使其看起来像这样

while (i < list.size() && !stopThread) {
    System.out.println(list.get(i));
}

这将在停止线程时退出第二个。

【讨论】:

    【解决方案2】:

    我没有看到i 的值不断变化,所以我假设你的内部循环是无限的。我不确定您对列表的意图是什么,但关键是一旦进入内部循环,stopThread 的值就无关紧要了。

    也许这个(改变 i 的值):

    while (!stopThread) {
    
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
    

    或者像这样(没有内循环):

    while (!stopThread) {
    
        if (i < list.size()) {
            System.out.println(list.get(i));
        }
    }
    

    或者这个(没有内循环):

    while (!stopThread && i < list.size()) {
    
        System.out.println(list.get(i));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多