黑马程序员技术交流社区

标题: 复习多线程又卡壳了 [打印本页]

作者: 张聪珉    时间: 2013-8-30 13:08
标题: 复习多线程又卡壳了
本帖最后由 张聪珉 于 2013-8-30 13:25 编辑
  1. class Res
  2. {
  3.         private String name;
  4.         private String sex;
  5.         private boolean flag = false;

  6.         public synchronized void set(String name,String sex)
  7.         {//俩线程,t1设置t2取,当俩线程第一次启动的时候t1进来设置完了之后,假如又抢到执行权,再次进来设置,判断标志为真等待了,这个时候t1持有了锁,t2怎么能取得了值呢?
  8.                 if(flag)
  9.                         try{this.wait();}catch(Exception e){}
  10.                 this.name = name;
  11.                
  12.                 this.sex = sex;
  13.                 flag = true;
  14.                 this.notify();
  15.         }
  16.         public synchronized void out()
  17.         {
  18.                 if(!flag)
  19.                         try{this.wait();}catch(Exception e){}
  20.                 System.out.println(name+"........"+sex);
  21.                 flag = false;
  22.                 this.notify();
  23.         }
复制代码

作者: Nero    时间: 2013-8-30 13:14
什么意思  没看懂
作者: 张聪珉    时间: 2013-8-30 13:15
Nero 发表于 2013-8-30 13:14
什么意思  没看懂

晕,代码没放进去,你等下

作者: gudao20080    时间: 2013-8-30 17:02
线程中的循环在哪里呢
作者: 影响力147753321    时间: 2013-8-30 17:28
哥们,t1等待会释入锁。凡是设置值的线程都会等待,不会持有锁。凡是要取得值的线程会抢到锁然后执行。不知你哪里没懂??

作者: 张聪珉    时间: 2013-8-30 18:09
影响力147753321 发表于 2013-8-30 17:28
哥们,t1等待会释入锁。凡是设置值的线程都会等待,不会持有锁。凡是要取得值的线程会抢到锁然后执行。不知 ...

晕哦,这样理解的话就行了,我以为在执行同步代码块里,线程等待的时候是持有锁的,OK了,谢谢哈
作者: 张聪珉    时间: 2013-8-30 18:11
gudao20080 发表于 2013-8-30 17:02
线程中的循环在哪里呢

循环代码就不想写了,主要就是这一块代码看不懂,现在解决了

作者: 王广亚    时间: 2013-8-30 22:05
在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。
当前线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。


作者: 老衲玩IT    时间: 2013-8-31 00:19
t1第一次进入set()设置后flag==true,它再次进来时就会等待,等待必然释放锁,必须等flag==false时才能往下执行,
t2得到锁进入out()顺利执行时会设置flag==false再释放锁给t1。
作者: 杨增坤    时间: 2013-9-5 20:41
楼主 你的问题如果解决了!



请把您的问题的"未解决"更改为"已解决"!



谢谢合作!



作者: 张聪珉    时间: 2013-9-5 22:42
杨增坤 发表于 2013-9-5 20:41
楼主 你的问题如果解决了!

不好意思啊,都忘了分类了,抱歉抱歉




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2