java吧 关注:1,253,356贴子:12,742,185
  • 34回复贴,共1

求各位大神帮忙解释一下此代码的流程,我是越看越昏了。

只看楼主收藏回复

synchronized public void save() throws InterruptedException{
if(!empty){
this.wait();
}
System.out.println("存钱之前的余额:"+this.getBank()+"每次存1000");
this.setBank(this.getBank()+1000);
System.out.println("存钱之后的余额"+this.getBank());
empty = false;
this.notify();
}
synchronized public void get() throws InterruptedException{
if(empty){
this.wait();
}
System.out.println("取钱之前的余额:"+this.getBank()+"每次取1000");
if(this.getBank()>=1000){
this.setBank(this.getBank()-1000);
}else{
System.out.println("穷鬼");
}
System.out.println("取款之后的余额:"+this.getBank());
empty = true;
this.notify();
}
}


IP属地:四川1楼2016-09-29 00:35回复
    我个人觉得if(empty){
    this.wait();
    } 此代码毫无意义,但是我注释掉了 还不能正常运行了 。求大神帮我写出此代码的运行流程。
    empty定义的是 false .


    IP属地:四川2楼2016-09-29 00:36
    回复
      已经魔怔了一天了,求帮助啊


      IP属地:四川来自Android客户端3楼2016-09-29 00:41
      回复
        什么情况啊


        IP属地:四川来自Android客户端4楼2016-09-29 00:42
        回复
          你这连main都没有运行个鬼啊


          IP属地:广东来自iPhone客户端5楼2016-09-29 00:43
          收起回复
            这是照着视频写的?视频上没讲清楚吗?


            IP属地:四川来自Android客户端6楼2016-09-29 00:45
            收起回复
              你说的那个if(empty)很重要。线程之间互相唤醒。放empty为true时这个唤醒那个,为flase时,那个唤醒这个。


              IP属地:四川来自Android客户端7楼2016-09-29 00:49
              收起回复
                你wait了,要等我唤醒,我wait了,等你唤醒,两个互相唤醒,只能有一个是唤醒的。就true和flase。别把它想得太复杂


                IP属地:四川来自Android客户端8楼2016-09-29 01:09
                收起回复
                  我的天!等我想想怎么组织,本来都要睡了,明天还得早起上课。


                  IP属地:四川来自Android客户端9楼2016-09-29 01:19
                  收起回复
                    empty初始值是true,两个线程开始执行,get线程等待,save线程执行到最后empty变成false,唤醒get,get被唤醒之后执行到最后empty又变成true,这样反反复复,存钱取钱


                    IP属地:上海来自Android客户端10楼2016-09-29 01:54
                    收起回复
                      为什么成为了false还唤醒了get呢


                      IP属地:四川来自Android客户端11楼2016-09-29 09:54
                      回复
                        两个empty wait是互相唤醒的,你存钱之后或取钱之后 empty的值是会改变的,如果注释掉的话,线程会循环到钱取完,而存钱的线程一直处于等待状态,所以会运行不下去的.


                        12楼2016-09-29 10:06
                        回复