谁能告诉一下 这两段java代码的区别啊 运行结果总是不一样

flag=false;if(flag){try{this.wait();}catch(InterruptedExceptione){}}else{this.name=na... flag = false;
if(flag){
try{this.wait();}catch(InterruptedException e){}
}
else{
this.name = name;
this.sex = sex;
flag = true;
this.notify();
}
和下面这一段
flag = false;
if(flag){
try{this.wait();}catch(InterruptedException e){}
}
this.name = name;
this.sex = sex;
flag = true;
this.notify();
class Resource
{
private String name;
private String sex;
private boolean flag = false;

public synchronized void set(String name,String sex)
{
if(flag)
try{this.wait();}catch(InterruptedException e){}
this.name = name;
this.sex = sex;
flag = true;
this.notify();

}

public synchronized void out()
{
if(!flag)
try{this.wait();}catch(InterruptedException e){}
System.out.println(name+"...+...."+sex);
flag = false;
notify();

}
}
展开
 我来答
路亚向前冲8t
2013-12-29 · TA获得超过484个赞
知道小有建树答主
回答量:636
采纳率:0%
帮助的人:434万
展开全部
单看这两段代码的逻辑步骤,运行结果是一样的。

但是你玩了线程就可能不一样了。

this.name = name;this.sex = sex;flag = true;

如果你能保证以上三个变量是每个线程独有,那运行结果就是一样的。

还可以设置代码同步块,把这一块代码同步,也可以。
更多追问追答
追问
我把正确代码写在问题上了 是个同步函数
不过 加不加else有什么区别啊?
如果加的话 怎么加才合适呢
追答
else不是重点。
重点是线程安全。

你别去纠结这个else。在单线程或者同步函数状态下加不加else都一样。
你刚才开始写那2个函数就算是一模一样,在多线程情况下执行结果也是不同的。

不知道这么讲,你可懂。
monical2
2013-12-29 · TA获得超过772个赞
知道小有建树答主
回答量:730
采纳率:60%
帮助的人:387万
展开全部
主线程 a线程 b线程
第一段 flag = true,执行完毕 等待 等待
第二段 flag = true 执行完毕 执行完毕 执行完毕

wait() 当前线程暂停,其他线程占领cpu,运行态=>关注flag是否为synchronized
notify() 唤醒可运行态的thread,让他们等待cpu分配来execute.注意理解每条线程的变量(global,private,synchronized).

以上
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
artintin
2013-12-29 · TA获得超过1.2万个赞
知道大有可为答主
回答量:7508
采纳率:80%
帮助的人:2823万
展开全部
运行效果是一样的,只有flag=true时运行效果才不一样。
前者只运行try{this.wait();}catch(InterruptedException e){}
后者不光运行try{this.wait();}catch(InterruptedException e){}
后面的代码
this.name = name;this.sex = sex;flag = true;this.notify();
也会运行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式