黑马程序员技术交流社区
标题:
请大家帮我找一下问题所在,O(∩_∩)O谢谢
[打印本页]
作者:
love~陌
时间:
2014-2-16 13:39
标题:
请大家帮我找一下问题所在,O(∩_∩)O谢谢
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){}
this.name=name;
this.sex=sex;
flag=true;
this.notify();
}
public void out()
{
if(!flag)
try{this.wait();}catch(Exception e){}
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("丽丽","women");
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 InputOutputDemo
{
public static void main(String[] args)
{
Res r=new Res();
new Thread(new Input(r)).start();
new Thread(new Output(r)).start();
}
}
复制代码
代码优化.png
(8 KB, 下载次数: 11)
下载附件
2014-2-16 13:38 上传
错误提示
作者:
云行水边
时间:
2014-2-16 13:47
违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。如果当前线程不是对象所得持有者,该方法抛出一个java.lang.IllegalMonitorStateException 异常”
作者:
love~陌
时间:
2014-2-16 13:48
全部代码在上面,能帮我看一下哪里出错了么?谢谢
作者:
云行水边
时间:
2014-2-16 14:01
对于notify这样处理就好啦,两个都要处理
try{this.notify();}
catch(Exception e){System.exit(0);}
复制代码
作者:
云行水边
时间:
2014-2-16 14:02
完整代码:
package com.itheima;
public class Diary3 {
public static void main(String[] args)
{
Res r=new Res();
new Thread(new Input(r)).start();
new Thread(new Output(r)).start();
}
}
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){}
this.name=name;
this.sex=sex;
flag=true;
try{this.notify();}
catch(Exception e){System.exit(0);}
}
public void out()
{
if(!flag)
try{this.wait();}
catch(Exception e){}
System.out.println(name+"........."+sex);
flag=false;
try{this.notify();}
catch(Exception e){System.exit(0);}
}
}
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("丽丽","women");
x=(x+1)%2;
}
}
}
class Output implements Runnable
{
private Res r;
Output(Res r)
{
this.r=r;
}
public void run()
{
while(true)
{
r.out();
}
}
}
复制代码
作者:
孤独的天奇
时间:
2014-2-16 14:39
package com.itheima;
public class Diary3 {
public static void main(String[] args)
{
Res r=new Res();
new Thread(new Input(r)).start();
new Thread(new Output(r)).start();
}
}
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){}
this.name=name;
this.sex=sex;
flag=true;
try{this.notify();}
catch(Exception e){System.exit(0);}
}
public synchronized void out()
{
if(!flag)
try{this.wait();}
catch(Exception e){}
System.out.println(name+"........."+sex);
flag=false;
try{this.notify();}
catch(Exception e){System.exit(0);}
}
}
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("丽丽","women");
x=(x+1)%2;
}
}
}
class Output implements Runnable
{
private Res r;
Output(Res r)
{
this.r=r;
}
public void run()
{
while(true)
{
r.out();
}
}
}
亲测好用
作者:
孤独的天奇
时间:
2014-2-16 14:41
你的out方法也应该是同步的。你再看看视频是不是你看错了呀
作者:
北吉星
时间:
2014-2-16 16:24
看到这段代码,果断給跪了!学习第四天伤不起啊!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2