当前位置: 首页 > news >正文

多线程练习——抽奖箱

题目:

 分析以下需求,并用代码实现:
有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {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());//线程1static List<Integer> list1= new ArrayList<>();//线程2static List<Integer> list2= new ArrayList<>();@Overridepublic 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();}
}

http://www.lryc.cn/news/97394.html

相关文章:

  • RK3399平台开发系列讲解(内核调试篇)Valgrind 内存调试与性能分析
  • Windows 11的最新人工智能应用Windows Copilot面世!
  • Mac 预览(Preview)丢失PDF标注恢复
  • 4.5. 方法的四种类型
  • 四旋翼无人机使用教程
  • 优化 PHP 数据库查询性能
  • vue 使用stompjs websocket连接rabbitmq
  • com.android.ide.common.signing.KeytoolException:
  • leetcode 1870. Minimum Speed to Arrive on Time(准时到达的最小速度)
  • 本地非文字资源无法加载
  • Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购
  • 万向节死锁
  • 大数据课程D1——hadoop的初识
  • xml命名空间
  • 七、Kafka源码分析之网络通信
  • WEB安全测试通常要考虑的测试点
  • 关于uni.createInnerAudioContext()的duration音频长度获取不到问题
  • 使用rknn-toolkit2把YOLOV5部署到OK3588上
  • 【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏模块14
  • ffplay播放器剖析(5)----视频输出剖析
  • 21.2:象棋走马问题
  • 【CSS】手写 Tooltip 提示组件
  • MySQL DDL语法
  • Git 绑定账号 和clone
  • ftp和sftp区别,以及xftp的使用
  • C++ 编程入门(一)—— Hello World
  • openlayers系列:加载arcgis和geoserver在线离线切片
  • 《人工智能安全》课程总体结构
  • unity关于匀速移动某些值的方法
  • 解决VScode下载太慢的问题记录