A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张聪珉 中级黑马   /  2013-8-30 13:08  /  2011 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张聪珉 于 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.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

10 个回复

倒序浏览
什么意思  没看懂
回复 使用道具 举报
Nero 发表于 2013-8-30 13:14
什么意思  没看懂

晕,代码没放进去,你等下
回复 使用道具 举报
线程中的循环在哪里呢
回复 使用道具 举报
哥们,t1等待会释入锁。凡是设置值的线程都会等待,不会持有锁。凡是要取得值的线程会抢到锁然后执行。不知你哪里没懂??
回复 使用道具 举报
影响力147753321 发表于 2013-8-30 17:28
哥们,t1等待会释入锁。凡是设置值的线程都会等待,不会持有锁。凡是要取得值的线程会抢到锁然后执行。不知 ...

晕哦,这样理解的话就行了,我以为在执行同步代码块里,线程等待的时候是持有锁的,OK了,谢谢哈
回复 使用道具 举报
gudao20080 发表于 2013-8-30 17:02
线程中的循环在哪里呢

循环代码就不想写了,主要就是这一块代码看不懂,现在解决了
回复 使用道具 举报
在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。
当前线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
t1第一次进入set()设置后flag==true,它再次进来时就会等待,等待必然释放锁,必须等flag==false时才能往下执行,
t2得到锁进入out()顺利执行时会设置flag==false再释放锁给t1。
回复 使用道具 举报
楼主 你的问题如果解决了!



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



谢谢合作!


回复 使用道具 举报
杨增坤 发表于 2013-9-5 20:41
楼主 你的问题如果解决了!

不好意思啊,都忘了分类了,抱歉抱歉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马