线程练习,感觉自己眼瞎了

来源:互联网 发布:wine for ubuntu下载 编辑:程序博客网 时间:2024/05/01 22:51

/*

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

*/

package cn.mrli.demo1;


public class Demo2 {
public static void main(String[] args) {
// SSQ ssq = new SSQ();
// new Thread(ssq, "前门").start();
// new Thread(ssq, "后门").start();
Number num = new Number();
new Thread(num, "前门").start();
new Thread(num, "后门").start();
}
}

public class Number implements Runnable {
private static int person = 100;
private int sumq = 0;
private int sumh = 0;
Random r = new Random(); 
public void run() {
while(true){
synchronized (this) {
try{
if(person<0){
return;
}
Thread.sleep(30);
String name = Thread.currentThread().getName();
if(name.equals("前门")){
sumq++;
System.out.println("编号为:"+(100-person+1)+"  的员工 从"+ name + "入场! 拿到的双色球彩票号码是:");
--person;
getNum();
}
if(name.equals("后门")){
sumh++;
System.out.println("编号为:"+(100-person+1)+"  的员工 从"+ name + "入场! 拿到的双色球彩票号码是:");
--person;
getNum();
}
if(person==0){
System.out.println("从后门入场的员工总共:"+sumh+"位员工");
                     System.out.println("从前门入场的员工总共:"+sumq+"位员工");
                     person--;
}
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}

public void getNum(){
List<String> list = new ArrayList<String>();
TreeSet<String> ts = new TreeSet<String>();
while(ts.size()<6){
int red = r.nextInt(32)+1;
if(red<10){
ts.add("0"+red);
}else{
ts.add(red+"");
}
}
list.addAll(ts);
int blue = r.nextInt(15)+1;
                if(blue<10){
              list.add("0"+blue);
                }else{
              list.add(blue+"");
       }

 System.out.println(list);
}

}

写了这个练习,去重,要利用set集合

原创粉丝点击