java—一个线程无法更改另一个线程的变量,即使该变量是可变的

k4aesqcs  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(450)

我有以下几点 Processor 班级:

public class Processor extends Thread {

    private volatile boolean running = true;

    @Override
    public void run() {
        while (running) {
            for (int i = 0; i < 1000; i++) {
                System.out.println("Hello " + i);
                Thread.sleep(100);
            }
        }
    }

    public void shutdown() {
        running = false;
    }
}

以下是我的 main 方法:

Processor processor = new Processor();
processor.start();

Scanner scanner = new Scanner(System.in);
scanner.nextLine();

processor.shutdown();

在我的 Processor 班级我有 volatile boolean 变量 running ,我已设置为 true . 我身体里的一个环 run 方法正在运行,只要 runningtrue . 我有一个单独的方法 shutdown ,执行时设置 runningfalse 从而停止了内部的循环 run 方法。
从我的 main 方法我在一个单独的线程中运行循环,然后执行 shutdown 方法。
尽管设置了变量 running 作为 volatile ,无法停止循环执行。
我哪里出错了?
我在用intellij ide。

cs7cruho

cs7cruho1#

你需要交换while和for循环。这样你就可以短路了

for (int i = 0; i < 1000; i++) {
    while (running) {
            System.out.println("Hello " + i);
            Thread.sleep(100);
        }
    }

我已经让你修了凹痕:)

相关问题