日期:2014-05-20  浏览次数:20759 次

请教多线程的问题,麻烦哪位高手帮忙,谢谢
不知为什么,在一个noify里面会卡住,请各位帮帮忙,谢谢

class   test{
java.util.Random   r   =   new   java.util.Random();
老板   老板a   =   new   老板();
员工   员工a   =   new   员工();
老婆   老婆a   =   new   老婆();
妹妹   妹妹a   =   new   妹妹();
孙女   孙女a   =   new   孙女();
class   没有资料   extends   Exception{}
class   怀孕   extends   Exception{}
class   有事   extends   Exception{}
class   不用学习   extends   Exception{}
class   跟孙女玩   extends   Exception{}
class   人物   extends   Thread{
资料   资料a   =   null;
String   状态   =   null;
public   void   得到资料(资料   资料a){
this.资料a   =   资料a;
}
public   void   失去资料(){
this.资料a   =   null;
}
public   void   递资料(人物   人物a){
System.out.println(人物a+ "拿到资料 ");
失去资料();
人物a.得到资料(资料a);
}
public   void   通知(人物   人物a,String   状态){
try{
this.sleep(r.nextInt(300));
}catch(Exception   e){}
人物a.改变状态(状态);
synchronized(人物a){
人物a.notify();
}
}
public   void   改变状态(String   状态){
this.状态   =   状态;
}
}
class   资料{
public   String   toString(){
return   "资料上面写着:不得随地大小便! ";
}
}
class   老板   extends   人物{
public   老板(){
状态   =   "工作 ";
start();
}
public   void   run(){
while(true){
try{
synchronized(this){
wait();
}
}catch(Exception   e){}
if(状态.equals( "工作 "))
看资料();
else
玩();
}
}
public   void   看资料(){
try{
if(资料a==null)   throw   new   没有资料();
System.out.println( "老板正在看资料....\n "+资料a);
System.exit(0);
}catch(没有资料   e){
通知(员工a, "上交资料 ");
}
}
public   void   玩(){
System.out.println( "老板要玩 ");
if(资料a!=null){
递资料(员工a);
}
//System.out.println(员工a);
通知(员工a, "取消上交资料 ");//就是这里卡住了
}
public   String   toString(){
return   "老板 ";
}
}
class   员工   extends   人物{
public   员工(){
start();
}
public   void   run(){
while(true){
try{
synchronized(this){
wait(100);
}
}catch(Exception   e){}
if(状态.equals( "上交资料 "))
上交资料();
else
取消上交资料();
}
}
public   void   上交资料(){
try{
if(资料a==null)   throw   new   没有资料();
递资料(老板a);
synchronized(老板a){
老板a.notify();
}
}catch(没有资料   e){
通知(老婆a, "送资料 ");
上交资料();
}
}
public   void   取消上交资料(){
if(资料a!=null){
递资料(妹妹a);
}
通知(老婆a, "取消送资料 ");
}
public   String   toString(){
return   "员工 ";
}
}
class   老婆   extends   人物{
public   老婆(){
资料a   =   new   资料();
start();
}
public   void   run(){