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

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

9 个回复

倒序浏览
[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
回复 使用道具 举报
奕明传媒 发表于 2016-10-25 00:17
[mw_shl_code=applescript,true]package com.gfxy.thread;

import java.util.ArrayList;

你太牛了,对了,你是怎么上传这种文件的啊。
回复 使用道具 举报
奕明传媒 发表于 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 + "位员工");
                }
哥么,这段代码的判断有什么特别注意的地方么?为何我改成了“后门”也可以啊。
回复 使用道具 举报
张镓仁1 发表于 2016-10-27 23:10
if ("后门".equals(Thread.currentThread().getName())) {
                        System.out.println("从后门入场的员工总共 ...

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

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

恩,我把它们写在了break里面了,你还在加班啊
回复 使用道具 举报
张镓仁1 发表于 2016-10-28 00:47
恩,我把它们写在了break里面了,你还在加班啊

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

您好,我对getCaipiao()的代码不理解,我想要双色球代码讲解的视频,你可以给我么?谢谢
回复 使用道具 举报
为什么蓝色的不在红色之后?按理圈中的内容应该在最后?一个集合就行了,为什么要两个?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马