请问多线程的有关问题,麻烦谁帮忙,多谢

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

请教多线程的问题,麻烦哪位高手帮忙,谢谢
不知为什么,在一个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(){


while(true){
try{
synchronized(this){
wait();
}
}catch(Exception   e){}
if(状态.equals( "送资料 "))
送资料();
else
取消送资料();
}
}
public   void   送资料(){
try{
if(true)   throw   new   怀孕();
递资料(员工a);
synchronized(员工a){
员工a.notify();
}
}catch(怀孕   e){
递资料(妹妹a);
通知(妹妹a, "送资料 ");
}
}
public   void   取消送资料(){
通知(妹妹a, "取消送资料 ");
}
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.状态.equals( "学习 "))   throw   new   有事();
递资料(员工a);
}catch(有事   e){
通知(孙女a, "玩 ");
送资料();
}
}
public   void   取消送资料(){
if(资料a!=null){
递资料(老婆a);
}
通知(孙女a, "学习 ");
}
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   玩(){
System.out.println( "孙女玩 ");
通知(老板a, "玩 ");
}
public   void   学习(){
System.out.println( "孙女学习 ");
通知(老板a, "工作 ");
}
public   String   toString(){
return   "孙女 ";
}
}
public   static   void   main(String   args[]){
test   t   =   new   test();
t.老板a.看资料();
}
}

[解决办法]
String 状态 = null; 改为 String 状态 = " "; 编译没问题
不知道你要问什么?