黑马程序员技术交流社区

标题: 该题的双色球的代码在上一问题那儿哦 [打印本页]

作者: 张镓仁1    时间: 2016-10-24 23:31
标题: 该题的双色球的代码在上一问题那儿哦
2.某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
        并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
        编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
        编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
        //.....
        从后门入场的员工总共: 13 位员工
        从前门入场的员工总共: 87 位员工


作者: 奕明传媒    时间: 2016-10-25 00:17
[AppleScript] 纯文本查看 复制代码
package com.gfxy.thread;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.TreeSet;

public class Test1 {

        /**
         * 7、某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
                并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
                编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
                编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
                //.....
                从后门入场的员工总共: 13 位员工
                从前门入场的员工总共: 87 位员工
         */
        public static void main(String[] args) {
                Door d = new Door();
                Thread t1 = new Thread(d,"前门");
                Thread t2 = new Thread(d,"后门");
                t1.start();
                t2.start();
        }

}

class Door implements Runnable {
        private static int peoples = 100;
        private static int front = 0;
        private static int back = 0;
        @Override
        public void run() {
                while(true) {
                        synchronized (Door.class) {
                                String name = Thread.currentThread().getName();
                                if (peoples <= 0) {
                                        break;
                                }
                                if("前门".endsWith(name)) {
                                        front++;
                                } else {
                                        back++;
                                }
                                try {
                                        Thread.sleep(100);
                                } catch (InterruptedException e) {
                                        e.printStackTrace();
                                }
                                System.out.println("编号为: " + peoples-- + " 的员工 从"
                                                + name + "入场!拿到的双色球彩票号码是:"+getCaiPiao());
                        }
                }
                if("前门".equals(Thread.currentThread().getName())){
                        System.out.println("从后门入场的员工总共: " + front + " 位员工");
                        System.out.println("从后门入场的员工总共: " + back +"位员工");
                }
        }
       
        public List<String> getCaiPiao() {
                List<String> list = new ArrayList<String>();
                TreeSet<String> ts = new TreeSet<String>();
                Random r = new Random();
                while(ts.size() < 6) {
                        int red = r.nextInt(33) + 1;
                        if(red < 10){
                                ts.add("0" +red);
                        } else {
                                ts.add(red+"");
                        }
                       
                }
                list.addAll(ts);
                int blue = r.nextInt(16) + 1;
                if(blue > 10){
                        list.add(blue+"");
                } else {
                        list.add("0" + blue);
                }
               
                return list;
        }
       
}
希望对你有用



双色球.png (25.26 KB, 下载次数: 54)

双色球.png

作者: 张镓仁1    时间: 2016-10-27 22:57
奕明传媒 发表于 2016-10-25 00:17
[mw_shl_code=applescript,true]package com.gfxy.thread;

import java.util.ArrayList;

你太牛了,对了,你是怎么上传这种文件的啊。
作者: 张镓仁1    时间: 2016-10-27 23:10
奕明传媒 发表于 2016-10-25 00:17
[mw_shl_code=applescript,true]package com.gfxy.thread;

import java.util.ArrayList;

if ("后门".equals(Thread.currentThread().getName())) {
                        System.out.println("从后门入场的员工总共: " + front + " 位员工");
                        System.out.println("从后门入场的员工总共: " + back + "位员工");
                }
哥么,这段代码的判断有什么特别注意的地方么?为何我改成了“后门”也可以啊。
作者: 奕明传媒    时间: 2016-10-28 00:44
张镓仁1 发表于 2016-10-27 23:10
if ("后门".equals(Thread.currentThread().getName())) {
                        System.out.println("从后门入场的员工总共 ...

我知道随便改后门可以,目的为的是统计结果只打印一次,如果不做判断的话是两个线程结果会打印两次,用户体验不太好,其实并没有什么卵用
作者: 奕明传媒    时间: 2016-10-28 00:47
张镓仁1 发表于 2016-10-27 22:57
你太牛了,对了,你是怎么上传这种文件的啊。

回复帖子不是可以直接用代码片段来引用吗?就是<>符号,还有这个双色球还有不懂的我这有这个题的视频讲解,如果需要私信和我联系
作者: 张镓仁1    时间: 2016-10-28 00:47
奕明传媒 发表于 2016-10-28 00:44
我知道随便改后门可以,目的为的是统计结果只打印一次,如果不做判断的话是两个线程结果会打印两次,用户 ...

恩,我把它们写在了break里面了,你还在加班啊
作者: 奕明传媒    时间: 2016-10-28 00:51
张镓仁1 发表于 2016-10-28 00:47
恩,我把它们写在了break里面了,你还在加班啊

现在学习Struts框架,目前还在上学,已通过社招面试,12月就去黑马,提前复习,不然就要搬又跟不上了
作者: HuangShunyu    时间: 2017-5-19 15:36
奕明传媒 发表于 2016-10-28 00:47
回复帖子不是可以直接用代码片段来引用吗?就是符号,还有这个双色球还有不懂的我这有这个题的视频讲解, ...

您好,我对getCaipiao()的代码不理解,我想要双色球代码讲解的视频,你可以给我么?谢谢
作者: HuangShunyu    时间: 2017-5-19 15:48
为什么蓝色的不在红色之后?按理圈中的内容应该在最后?一个集合就行了,为什么要两个?





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