本帖最后由 toukya 于 2016-8-10 15:23 编辑
class test15{
public static void main(String[] args){
test15 tt = new test15();
tt.new Gate("前门").start();
tt.new Gate("后门").start();
}
/*
* 2.某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
//.....
从后门入场的员工总共: 13 位员工
从前门入场的员工总共: 87 位员工
*/
Set<Integer> set = new HashSet<Integer>();
Random random = new Random();
class Gate extends Thread{
private String name;
public Gate(String name){
this.name = name;
}
int k=0;
@Override
public String toString() {
return "Gate [name=" + name + "]";
}
@Override
public void run() {
// TODO Auto-generated method stub
while(set.size()!=100)
{
int next;
synchronized(set)
{
if(set.size()!=100)
{
while(true)
{
next = random.nextInt(100)+1;
if(!set.contains(next))
{
set.add(next);
break;
}
}
employee e=new employee(next);
e.setList(getTicket());
System.out.println("编号为:"+e.getI()+"的员工从"+name+"入场!,拿到的双色球彩票号码是:"+e.getList());
++k;
}
}
}
System.out.println("从"+name+"入场的员工总共:"+k+"位员工");
}
}
class employee{
private int i;//编号
private List<Integer> list;//彩票号码
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public List<Integer> getList() {
return list;
}
public void setList(List<Integer> list) {
this.list = list;
}
public employee(int i) {
super();
this.i = i;
}
}
private List<Integer> getTicket(){
Set<Integer> set = new HashSet<Integer>();
List<Integer> list = new ArrayList<Integer>();
while(set.size()!=6)
{
Random random = new Random();
set.add(random.nextInt(33)+1);
}
list.addAll(set);
list.add(new Random().nextInt(16)+1);
return list;
}
} |