黑马程序员技术交流社区

标题: 求助大神,博主务删!!!!!!! [打印本页]

作者: aa199551    时间: 2016-3-24 20:55
标题: 求助大神,博主务删!!!!!!!
西瓜地里面有100个西瓜,3个女生,2个男生同时去搬西瓜,直到西瓜地中的西瓜被拿光。
女生每次能搬1个西瓜,男生每次能搬2个西瓜(如果篮子只剩1个西瓜,那么男生只搬1个)。
请利用多线程模拟上述情景!!       应该怎么去做
作者: ShallDoll    时间: 2016-3-24 21:12
给个提示,用一个子类实现Runnable接口重写run方法并加锁,然后用Thread的有参构造
作者: ShallDoll    时间: 2016-3-25 09:10
对不起,昨天回复没经过大脑,今天敲代码时发现错了,现在写出来了,思路是这样的。在主方法定义一个静态成员变量西瓜,然后把男生搬瓜和女生搬瓜各提取出一个方法。然后男生调用2次,女生调用3次
作者: 霸道总裁爱村花    时间: 2016-3-25 10:30
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();
                        }
                }
               
        }
       
}
练下手,初学者也不是很熟悉,仅供参考




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2