题目:
分析以下需求,并用代码实现:
有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {10,5,20,50,100,200,500,800,900,2,80,300,700};创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从抽奖池中获取奖项元素并打印在控制台上,格式如下:
每次抽的过程中,不打印,抽完时一次性打印(随机)
抽奖箱1总共产生:6个奖项,分别为:[2, 20, 700, 50, 800, 5]最高奖项为800总金额:1577
抽奖箱2总共产生:7个奖项,分别为:[500, 80, 100, 200, 900, 300, 10]最高奖项为900总金额:2090
package com.songqiao.test05;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class MyThread extends Thread {
static List<Integer> list= Stream.of(10,5,20,50,100,200,500,800,900,2,80,300,700).collect(Collectors.toList());
//线程1
static List<Integer> list1= new ArrayList<>();
//线程2
static List<Integer> list2= new ArrayList<>();
@Override
public void run() {
while (true){
synchronized (MyThread.class){
if (list.isEmpty()){
if(getName().equals("抽奖箱1")){
System.out.println("抽奖箱1总共产生:"+list1.size()+"个奖项,"+"分别为:"+list1+"最高奖项为"+Collections.max(list1)+"总金额:"+list1.stream().mapToInt(Integer::intValue).sum());
}else {
System.out.println("抽奖箱2总共产生:"+list2.size()+"个奖项,"+"分别为:"+list2+"最高奖项为"+Collections.max(list2)+"总金额:"+list2.stream().mapToInt(Integer::intValue).sum());
}
break;
}else {
//继续抽奖,打乱集合顺序
Collections.shuffle(list);
//删除第一个元素
Integer prize = list.remove(0);
//System.out.println(getName()+"又产生了一个:"+prize+"大奖");
if("抽奖箱1".equals(getName())){
list1.add(prize);
}else {
list2.add(prize);
}
}
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package com.songqiao.test05;
public class test05_choujiang {
public static void main(String[] args) {
MyThread t1=new MyThread();
MyThread t2=new MyThread();
t1.setName("抽奖箱1");
t2.setName("抽奖箱2");
t1.start();
t2.start();
}
}