背景:今天朋友拿了一个问题找到我,我看来半天是没看出什么问题出来,有没有看出问题所在的,还望指教一下!谢谢!!
业务需求:在main方法中启动两个线程,第1个线程循环随机打印100以内的整数,直到第2个线程从键盘读取了“Q”命令。
问题:我正确的在控制台输入了q,可是子线程A并没有停止,按照逻辑,线程B输入Q的时候会调用线程A的set方法把loop的值改成false,但这个时候线程A中while的判断条件loop的值并没有改变,这是为什么了?
import java.util.Scanner;
/*·
(1)在main方法中启动两个线程
(2)第1个线程循环随机打印100以内的整数
(3)直到第2个线程从键盘读取了“Q”命令。
*/
public class HomeWork01 {
public static void main(String[] args) throws InterruptedException {
A a = new A();
B b = new B();
a.start();
b.start();
}
}
class A extends Thread{
private boolean loop = true;
public void setLoop(boolean loop) {
this.loop = loop;
}
@Override
public void run() {
while (loop){
System.out.println((int)(Math.random()*(100-0)));
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class B extends Thread{
@Override
public void run() {
Scanner sca = new Scanner(System.in);
while (true){
System.out.println("输入Q结束:");
char end = sca.next().toUpperCase().charAt(0);
System.out.println("-----"+end);
if (end == 'Q'){
System.out.println("Q进来了----");
new A().setLoop(false);
System.out.println("循环退出");
break;
}
}
}
}