本帖最后由 jxj4227982333 于 2012-5-27 15:59 编辑
今天在复习多线程这块时发现了个小问题,是关于多线程间通信的。如下:
- class Input implements Runnable
- {
- Res r;
- Input(Res r)
- {
- this.r = r;
- }
- public void run()
- {
- int x = 0;
- while(true)
- {
- synchronized(r) //当input持有锁进入后,output 是不能够进入同步代码块的,当然我的假设
- { //是input先持有锁进来的output还没来的及判断锁更没有进入等待状态。
- if(r.flag)
- try{r.wait();}catch(Exception e){} //当input线程执行到这时,进入了等待状态后,它还持有锁啊,
- if(x==0) //output线程为什么还能够执行?难道是input进入等待状态
- { //后,不仅放弃了执行权,锁也不持有了吗 ?
- r.name = "小明";
- r.sex = "男男男男男男";
- }
- else
- {
- r.name = "rose";
- r.sex = "female";
- }
- x=(x+1)%2;
- r.flag = true;
- r.notify();
- }
- }
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////
- class Output implements Runnable
- {
- Res r;
- Output(Res r)
- {
- this.r = r;
- }
- public void run()
- {
- while(true)
- {
- synchronized(r) //当input持有锁在执行的时候甚至进入等待状态后,output很可能还没有进入同步代码块啊
- {
- if(!r.flag)
- try{r.wait();}catch(Exception e){}
- System.out.println(r.name+"...."+r.sex);
- r.flag = false ;
- r.notify();
- }
- }
- }
- }
复制代码 我的问题都写在上面的注释里面了,谁来帮我把思路捋捋顺。
|