import java.util.*;
/*
* 有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {10,5,20,50,100,200,500,800,2,80,300,700};
创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从抽奖池中获取奖项元素并打印在控制台上,格式如下:
每次抽出一个奖项就打印一个(随机但是奖励不能重复)
1.每次抽出一个奖项就打印一个(随机)
抽奖箱1 又产生了一个 10 元大奖
抽奖箱1 又产生了一个 100 元大奖
抽奖箱1 又产生了一个 200 元大奖
抽奖箱1 又产生了一个 800 元大奖
抽奖箱2 又产生了一个 700 元大奖
//.....
* */
public class Test1 {
public static void main(String[] args) {
//创建一个抽奖池数组
int[] arr = {10, 5, 20, 50, 100, 200, 500, 800, 2, 80, 300, 700};
//将抽奖池中的元素放入集合list中(因为集合可以有删除方法,便于操作)
ArrayList<Integer> list = new ArrayList<>();
for (int i : arr) {
list.add(i);
}
//创建Random对象模拟抽奖
Random r = new Random();
//创建Runnable接口的匿名内部类 重写run方法 run方法中就是线程任务
Runnable runnable = new Runnable() {
@Override
public void run() {
while (true){
synchronized (this){
if(list.size()>0){
//随机抽取一个奖项的索引值
int index = r.nextInt(list.size());
//list调用remove方法 返回被删除的对象
Integer beRemove = list.remove(index);
//让该线程睡一会 给另一个线程一点抢夺的机会
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
//打印抽到的奖项
System.out.println(Thread.currentThread().getName()+" 又产生了一个 "+beRemove+" 元大奖");
}else{
break;
}
}
}
}
};
//创建两个线程模拟抽奖箱,并将Runnable对象传递过来
Thread t1 = new Thread(runnable, "抽奖箱1");
Thread t2 = new Thread(runnable, "抽奖箱2");
//调用线程的start方法 开启线程
t1.start();
t2.start();
}
}