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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 水月灬清影 于 2016-8-29 15:35 编辑

也是论坛里见的题目,不论是不是考试题,我是做了,题目如下:
某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
        并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
        编号为: 2 的员工从后门入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
        编号为: 1 的员工从后门入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
        //.....
        从后门入场的员工总共: 13 位员工
        从前门入场的员工总共: 87 位员工
代码如下:
[Java] 纯文本查看 复制代码
import java.util.ArrayList;
import java.util.Random;

public class LuckyBalls {
        public static void main(String[] args) {
                MyThread my=new MyThread();
                Thread t1=new Thread(my,"前门");
                Thread t2=new Thread(my,"后门");
                t1.start();
                t2.start();
                
        }
}


public class MyThread implements Runnable{
	private int person=100;
	private Object obj=new Object();
	private int front=0;
	private int back=0;
	public void run() {
		while(true){
			synchronized(obj){
				//由于多次用到线程名称,特设置一个变量表示
				String name=Thread.currentThread().getName();
				if(person>0){
					//Set集合更为简单,本例只是为了练习用contains()判断List集合是否含重复元素
					ArrayList<String> list=new ArrayList<String>();
					//注意用list.size()作为循环结束条件
					for(int x=0;list.size()<7;x++){
						Random r=new Random();
						int num=r.nextInt(99)+1;
						
						//转成字符串,对10以下数补零!
						String s="";
						if(num<10){
							s="0"+String.valueOf(num);
						}else{
							s=String.valueOf(num);
						}
						
						//contains()方法是去重的关键
						if(!list.contains(s)){
							list.add(s);
						}
					}
					//计数
					if(name.equals("前门")){
						front++;
					}else{
						back++;
					}
					//直接输出list集合即可满足所要求的格式,不必转成数组
					System.out.println("编号为:"+(person--)+"的员工从"+name+"入场! 拿到的双色球彩票号码是:"+list);
					
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
				}else{
					//输出前后门总数   并    跳出循环以结束线程运行
					if(name.equals("前门")){
						System.out.println(name+"共计"+front+"人");break;
					}else{
						System.out.println(name+"共计"+back+"人");break;
					}
					
				}
			}
		}
		
	}	
}





2 个回复

倒序浏览
看着屌屌的~~~
回复 使用道具 举报
  还没学   感觉挺有用的  谢谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马