为了账号安全,请及时绑定邮箱和手机立即绑定

java线程没有响应,像是暂停了一样

java线程没有响应,像是暂停了一样

慕婉清6462132 2019-04-11 13:15:48
简单地来说,就是有两个线程A和B,在main函数里面先后启动他们线程A的run函数里面有一个while循环,循环体里主要是一句if,判断的是一个存在于A里面的一个布尔变量boo,如果是true就输出一句话,但boo在初始化的时候就已经设置为false线程B在接收了一次输入之后,再把线程A里面的boo改成true,仅此而已。现在问题来了,线程A始终没有输出,相当于线程A暂停了(线程A并没有被杀死),求解呀...更加奇怪的是,如果使用debug模式,程序是可以正常运行的,这又是为什么呢?代码如下:public class ThreadA extends Thread{     public boolean boo;     public ThreadA() {         boo = false;     }     public void run() {         while (true) {             if (boo) {                 System.out.println("boo equals ture now!");                 boo = false;             }         }     } } public class ThreadB extends Thread{     private ThreadA a;     public ThreadB(ThreadA a) {         this.a = a;     }     public void run() {         try {             int num = System.in.read();         } catch (IOException e) {             e.printStackTrace();         }         a.boo = true;     } } public class MainFunc {     public static void main(String[] args) {         ThreadA a = new ThreadA();         ThreadB b = new ThreadB(a);         a.start();         b.start();     } }
查看完整描述

4 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

这是基本的java程序错误,请把boo改成volatile。:-D.
至于为什么,请参考jls

查看完整回答
反对 回复 2019-05-07
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

A线程启动一直在判断foo, B线程启动后被IO阻塞等待输入,输入完后,boo为true, B线结束了。A线程判断foo为true输出一句并将foo设为false。A线程中foo一直为false, 线程死循环判断foo


查看完整回答
反对 回复 2019-05-07
?
手掌心

TA贡献1942条经验 获得超3个赞

boo的值set进去就好了


查看完整回答
反对 回复 2019-05-07
  • 4 回答
  • 0 关注
  • 758 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信