JAVA中的线程问题 求大神 轻喷 新手一枚

杨XINGQI 2013-08-16 06:52:50

class Ren
{
private String name;
private String sex;
boolean b=false;
public synchronized void set(String name,String sex)
{
if(b)
try{this.wait();}catch(Exception e){}
this.name=name;
this.sex=sex;
b=true;
this.notify();
}
public synchronized void out()
{
if(!b)
try{this.wait();}catch(Exception e){}
System.out.println(name+sex);
b=false;
this.notify();






其中的BOOLEAN b 在私有成员中已经定义成false .if(b)
try{this.wait();}catch(Exception e){}
我理解的意思是如果为false 则等待 ,下面的if(!b)
try{this.wait();}catch(Exception e){}
意思为如果为非false 即true 则等待.
要是这么理解我就搞不通了 。
还有一种理解为 if(b)
try{this.wait();}catch(Exception e){}
b 默认为TRUE, 而成员定义的时候为false 所以 if(b)则不用等待。




=====我的理解对不对 大神们帮帮忙 这点我看视频好几遍了 一直没搞清楚
...全文
140 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
VICTOR_Hcz 2013-08-17
  • 打赏
  • 举报
回复
我觉得还是if判断的问题,if语句判断括号里面的内容时,在括号里没有指明是true或者false的情况下,都是默认为false的。所以你执行的结果搞反了,所以得不到预期的结果。
杨XINGQI 2013-08-17
  • 打赏
  • 举报
回复
引用 1 楼 fudongrifdr 的回复:
这不是线程问题。。这是if条件判断问题。。。 if()括号里条件表达式结果为true,if后面的语句或语句块才会执行 如b=false if(b){...},{}里的语句就不会执行。。这有什么不能理解的。。
嗯 谢谢 以后可能还得多请教了
杨XINGQI 2013-08-17
  • 打赏
  • 举报
回复
谢谢上面的回答 我可能是前面的基础还没掌握好
hippoppower 2013-08-17
  • 打赏
  • 举报
回复
这段代码的含义应该是 保证set() 和 out() 在多线程情况下交替执行
oh_Maxy 2013-08-16
  • 打赏
  • 举报
回复
建议if、while、for之类的分支操作,要用{}括起来,能省不少问题。
末日哥 2013-08-16
  • 打赏
  • 举报
回复
这不是线程问题。。这是if条件判断问题。。。 if()括号里条件表达式结果为true,if后面的语句或语句块才会执行 如b=false if(b){...},{}里的语句就不会执行。。这有什么不能理解的。。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧