A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

西瓜地里面有100个西瓜,3个女生,2个男生同时去搬西瓜,直到西瓜地中的西瓜被拿光。
女生每次能搬1个西瓜,男生每次能搬2个西瓜(如果篮子只剩1个西瓜,那么男生只搬1个)。
请利用多线程模拟上述情景!!       应该怎么去做

3 个回复

正序浏览
public class Watermelon {

        /**
         * @param args
         */
        public static void main(String[] args) {
                new Thread(new Move("张三",'m')).start();//张三,男,以下类似
                new Thread(new Move("李四",'m')).start();
                new Thread(new Move("小露",'w')).start();
                new Thread(new Move("小红",'w')).start();
                new Thread(new Move("小兰",'w')).start();

        }

}

class Move implements Runnable{
        public static int  count = 100;//西瓜数量是100
        private String name;//记录人名
        private char sex;//记录性别
        Move(String name, char sex){//定义有参构造方法
                this.name = name;
                this.sex = sex;
        }
        public void run() {
                while(true){
                        synchronized (Move.class) {
                                if(this.count ==0) break;
                                if(this.sex == 'w'){//性别为女时搬走一个西瓜
                                        System.out.println("女生"+this.name+"搬走1个西瓜,还剩"+--count+"个");
                                       
                                }
                                if(this.sex == 'm'){//性别为男时
                                        if(this.count == 1){//若只剩一个,搬走一个西瓜
                                                System.out.println("男生"+this.name+"搬走1个西瓜,还剩"+--count+"个");
                                               
                                        }
                                        else{//否则搬走两个西瓜
                                                this.count -= 2;
                                                System.out.println("男生"+this.name+"搬走2个西瓜,还剩"+count+"个");
                                               
                                        }
                                }
                               
                        }
                        try {
                                Thread.sleep(1);//为了显示多线程效果,睡眠1毫秒
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
               
        }
       
}
练下手,初学者也不是很熟悉,仅供参考

评分

参与人数 1黑马币 +2 收起 理由
aa199551 + 2 赞一个!

查看全部评分

回复 使用道具 举报 1 0
ShallDoll 来自手机 中级黑马 2016-3-25 09:10:37
藤椅
对不起,昨天回复没经过大脑,今天敲代码时发现错了,现在写出来了,思路是这样的。在主方法定义一个静态成员变量西瓜,然后把男生搬瓜和女生搬瓜各提取出一个方法。然后男生调用2次,女生调用3次

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
给个提示,用一个子类实现Runnable接口重写run方法并加锁,然后用Thread的有参构造
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马