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

高手请进:关于一个多线程问题的解答
不好意思,请教你一下     (论坛现在老是发不了帖,只有直接发给你了,打搅了,汗还太长了,只能分两份了)

我今天自己写了一下这个小程序

这个题目的要求是   :
有4对家庭,分别有爸爸,妈妈,儿子,女儿

爸爸们专门负责往盘子里放苹果,妈妈们专门负责往盘子里放橘子,
儿子门专门吃盘子里的橘子;女儿们专门吃盘子里的苹果;

注意;盘子里最多只能有10个水果,而且每次只能放或者取一个水果;

就这么多了,代码在下面,运行出现了点问题,好象有时候   某些方法被访问多次,
有兴趣的可以运行一下代码,帮我分析一下原因,谢谢   了
class   ThreadTest
{

public   static   void   main(String[]   args)
{
Plate   q=new   Plate();
Father   f1=new   Father(q);
Father   f2=new   Father(q);
Father   f3=new   Father(q);
Father   f4=new   Father(q);

Mother   m1=new   Mother(q);
Mother   m2=new   Mother(q);
Mother   m3=new   Mother(q);
Mother   m4=new   Mother(q);

Son   s1=new   Son(q);
Son   s2=new   Son(q);
Son   s3=new   Son(q);
Son   s4=new   Son(q);

Daughter   d1=new   Daughter(q);
Daughter   d2=new   Daughter(q);
Daughter   d3=new   Daughter(q);
Daughter   d4=new   Daughter(q);

f1.start();
f2.start();
f3.start();
f4.start();

m1.start();
m2.start();
m3.start();
m4.start();

s1.start();
s2.start();
s3.start();
s4.start();

d1.start();
d2.start();
d3.start();
d4.start();
}
}

class   Father   extends   Thread
{
Plate   q;
Father(Plate   q)
{
this.q=q;
}
public   void   run()
{
while(true)
{
q.putApple(q.apple);
System.out.println(Thread.currentThread().getName()+ "   put   one   apple:   the   number   of   apple   in   the   plate: "+q.apple);
}
}
}
class   Mother   extends   Thread
{
Plate   q;
Mother(Plate   q)
{
this.q=q;
}
public   void   run()
{
while(true)
{
q.putOrange(q.orange);
System.out.println(Thread.currentThread().getName()+ "   put   one   orange:the   number   of   orange   in   the   plate: "+q.orange);
}
}
}

------解决方案--------------------
估计又是线程同步的问题
synchronized
------解决方案--------------------
加锁吧