Java——有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300}
程序员文章站
2022-03-04 18:40:28
...
有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从arr数组中获取奖项元素并打印在控制台上,格式如下:
抽奖箱1 又产生了一个 10 元大奖
抽奖箱2 又产生了一个 100 元大奖
实现代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RewardPool {
public static void main(String[] args) {
Reward reward = new Reward();
new Thread(reward,"抽奖1").start();//启动线程
new Thread(reward,"抽奖2").start();
}
}
//创建奖金类
class Reward implements Runnable{
int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
List<Integer> list = new ArrayList<>();
public void run() { //重写run方法
while(true) {
lottery();
if(list.size() == arr.length)
break;//当list长度和arr长度相等时说明执行完毕,结束循环
}
}
public synchronized void lottery() {
int index = new Random().nextInt(arr.length);//随机获取数组下标
if(!list.contains(index)) {//判断list中有没有重复添加素组下标,如果重复则不执行
list.add(index);
try {
Thread.sleep(200);
} catch (Exception e) {
System.out.println(e);
}
String name = Thread.currentThread().getName();//获取线程名字
if(name.equals("抽奖1"))
System.out.println(name+"又产生了一个"+arr[index]+"元大奖");
else
System.out.println(name+"又产生了一个"+arr[index]+"元大奖");
}
}
}
输出结果: