本帖最后由 穆爱明 于 2013-6-13 17:03 编辑
今天看day12的多线程,然后自己敲代码运行,但运行结果却不同,开始以为自己敲错了,仔细检查了好几遍,发现比老师的代码多了红色的部分,并且自己在set方法上打了断点调试,奇怪的是调试的输出结果和老师的一样,但一运行结果就不同了。开始我以为我的代码是规范写法,并且是按逻辑加的,老师的只是简便写法罢了,谁知道结果却差别很大。不知哪位同学能够帮忙解答一下其中的不同,不胜感激呀!
class Res
{
private String name;
private String sex;
private boolean flag = false;
public synchronized void set(String name,String sex)
{
if(flag){
try{this.wait();}catch(Exception e){}
}else{
this.name = name;
this.sex = sex;
flag = true;
this.notify();
}
}
public synchronized void out()
{
if(!flag){
try{this.wait();}catch(Exception e){}
}else{
System.out.println(name+"........"+sex);
flag = false;
this.notify();
}
}
}
class Input implements Runnable
{
private Res r ;
Input(Res r)
{
this.r = r;
}
public void run()
{
int x = 0;
while(true)
{
if(x==0)
r.set("mike","man");
else
r.set("丽丽","女女女女女");
x = (x+1)%2;
}
}
}
class Output implements Runnable
{
private Res r ;
Output(Res r)
{
this.r = r;
}
public void run()
{
while(true)
{
r.out();
}
}
}
class InputOutputDemo2
{
public static void main(String[] args)
{
Res r = new Res();
new Thread(new Input(r)).start();
new Thread(new Output(r)).start();
}
}
|