Java 线程不停止

Java 线程不停止,java,multithreading,Java,Multithreading,我有一个线程,在该线程中我声明了一个布尔值,如下所示: volatile boolean stopThread = false; 然后在我的线程中,看起来像这样: public void run() { while (!stopThread) { while (i < list.size()) { System.out.println(list.get(i)); } } } 一切正常,但我希望允许用户停止线

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

volatile boolean stopThread = false;
然后在我的线程中,看起来像这样:

public void run() {

    while (!stopThread) {

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

    }

}
一切正常,但我希望允许用户停止线程,因此我创建了一个按钮并添加了以下两行:

t1.stopThread = true;
t2.stopThread = true;
但当我点击按钮时,线程仍在运行。我还尝试了以下方法

CheckThread.stopThread = true;
t1 = new CheckThread();
t2 = new CheckThread();

t1.start();
t2.start();
但这也不行为什么我的线程没有停止?

编辑:

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

CheckThread t1;
CheckThread t2;
单击按钮后,我将执行以下操作

CheckThread.stopThread = true;
t1 = new CheckThread();
t2 = new CheckThread();

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

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

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

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

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

我看不到
I
的值在不断变化,因此我假设您的内部循环是无限的。我不确定您对列表的意图是什么,但重点是,一旦输入了内部循环,
stopThread
的值就无关紧要了

可能是(改变i的值):

while(!stopThread){
对于(int i=0;i
或者像这样(没有内部循环):

while(!stopThread){
如果(i
或者这个(没有内部循环):

while(!stopThread&&i
是否尝试过调试?首先从stopThread声明中删除static关键字。这应该是一个实例变量。我已经删除了static关键字,线程仍然没有停止。显然还有其他事情正在发生。张贴你如何开始和停止你的线程。发布实际的while循环。你怎么知道你的线程没有停止,它在做什么?
while (!stopThread) {

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

    System.out.println(list.get(i));
}