某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
//.....
public class RuChangThread implements Runnable {
int ID;//员工id
String lottery;//彩票号码
public RuChangThread(int iD, String lottery) {
super();
ID = iD;
this.lottery = lottery;
}
@Override
public void run() {
// TODO Auto-generated method stub
ruChang();
}
public synchronized void ruChang() {
System.out.println("编号为:"+ID+" 的员工 从"+Thread.currentThread().getName()+" 入场! 拿到的双色球彩票号码是: "+lottery);
try {//可以没有,写是为了看清入场
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.util.ArrayList;
import com.qf.xc.RuChangThread;
public class RuChangTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
RuChangThread ruChangThread;//定义入场的线程
Thread fDoor;//前门线程
Thread bDoor;//后门线程
boolean isDoor=true;//判断前后门进场
for (int i = 0; i < 100; i++) {//100个员工
int ID=(int)(Math.random()*100+1);//随机生成一个员工
ArrayList<Integer> lottery=new ArrayList<>();//定义彩票的number
StringBuffer sBuffer=new StringBuffer("[");
for (int j = 0; j < 7; j++) {
lottery.add((int)(Math.random()*32));
if (j!=7) {
sBuffer.append(lottery.get(j)+",");
}else {
sBuffer.append(lottery.get(j));
}
}
sBuffer.append("]");
ruChangThread=new RuChangThread(ID, lottery.toString());
fDoor=new Thread(ruChangThread,"前门");
bDoor=new Thread(ruChangThread,"后门");
if (isDoor) {
fDoor.start();
} else {
bDoor.start();
}
isDoor=!isDoor;
}
}
}