VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 851|回复: 2

高手请进:关于一个多线程问题的解答

[复制链接]

2

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-6 18:50:01 | 显示全部楼层 |阅读模式
不好意思,请教一下,我今天自己写了一下这个小程序

这个题目的要求是 :
有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);
                }
        }
}
回复

使用道具 举报

1

主题

51

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-1-7 13:27:01 | 显示全部楼层
估计又是线程同步的问题
synchronized
回复

使用道具 举报

0

主题

13

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-1-9 21:36:01 | 显示全部楼层
加锁吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表