问一个多线程的问题,代码如下,运行Run.java,为什么死循环不能停下来?

package extthread;

public class RunThread extends Thread {
private boolean isRunning = true;

public boolean isRunning() {
return isRunning;
}

public void setRunning(boolean isRunning) {
this.isRunning = isRunning;
}

@Override
public void run() {
System.out.println("进入run了");
while (isRunning == true) {
}
System.out.println("线程被停止了!");
}
}

package test;

import extthread.RunThread;

public class Run {
public static void main(String[] args) {
try {
RunThread thread = new RunThread();
thread.start();
Thread.sleep(1000);
thread.setRunning(false);
System.out.println("已经赋值为false");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

你的run()方法里面,while (isRunning == true) {}一直在运行,等于把isRunning这个变量给锁死了,所以main()方法里thread.setRunning(false);其实是赋值失败的。所以一直在循环。

你的意思是想要程序在1秒后停止对吧,while改成这样:

while (isRunning == true) {
    try {
        Thread.sleep(1);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

sleep()可以让线程停止资源占用,即thread.setRunning(false);可以运行成功了

温馨提示:答案为网友推荐,仅供参考
相似回答