多线程练习——抽奖箱

题目:

 分析以下需求,并用代码实现:
有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {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 list= Stream.of(10,5,20,50,100,200,500,800,900,2,80,300,700).collect(Collectors.toList());
    //线程1
    static List list1= new ArrayList<>();
    //线程2
    static List 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();
    }
}

你可能感兴趣的:(java基础,java,开发语言)