在学习编程中遇到点小问题

各位求指点,在学习多线程阶段遇到了一点小问题。
当我把while中的loop设置成false时,此代码依旧没有停止循环,我推断是不是while里面不能加for循环,加了就没办法终止?

```java
public class work001 {
    public static void main(String[] args) {
        cc cc = new cc();
           cc.start();
        DD dd = new DD(cc);
        dd.start();
    }
}
class cc extends Thread{
private boolean loop=true;

    public void setLoop(boolean loop) {
        this.loop = loop;
    }

    @Override
    public void run() {//
        while (loop){                                    ** //当loop值变成false的时候,循环不停止**
            for (int i = 0; i <10 ; i++) {
                System.out.println(i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            };


        }
    }
}
class DD extends Thread {
    private Scanner scanner = new Scanner(System.in);
    private cc cc;

    public DD(cc cc) {
        this.cc = cc;
    }

    @Override
    public void run() {
        while (true) {
            System.out.println("请输入指令Q表示退出:");
            char key = scanner.next().toUpperCase().charAt(0);
            if (key == 'A') {
                cc.setLoop(false);
                System.out.println("c线程退出");
                break;
            }

        }
    }
}

```

  • 输入A之后,你要输入换行呀
  • 另外即便设置成false,也要等到 for循环遍历完 才结束

img

代码逻辑是创建了两个线程,一个是cc,一个是dd。cc线程中有一个死循环,循环中每隔1秒输出0-9的数字。dd线程中接收用户的输入,如果用户输入了字母A,则设置cc线程的loop变量为false,cc线程就会退出死循环,程序结束。

需要注意的是,cc线程中的loop变量需要用volatile关键字修饰,以保证在多线程环境下的可见性。这个loop不是线程安全的,需要改成线程安全的