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

Java 多线程练习2 (抽奖比较Runnable写法)

        MultiProcessingExercise2

package MultiProcessingExercise120240814;import java.util.ArrayList;
import java.util.Collections;public class MultiProcessingExercise1 {public static void main(String[] args) {// 需求:// 在此次抽奖过程中,抽奖箱1总共产生了6个奖项,分别为:10,20,100,500,2,300// 最高奖项为300元,总计额为932元// 在此次抽奖过程中,抽奖箱2总共产生了6个奖项,分别为:5,50,200,800,80,700// 最高奖项为800元,总计额为1835元// 在此次抽奖过程中,抽奖箱2中产生了最大奖项,该奖项金额为800元ArrayList<Integer> pool = new ArrayList<>();for (int i = 0; i < 1000; i++) {pool.add(0);}Collections.addAll(pool, 10,5,20,50,100,200,500,800,2,80,300,700);Lottery lottery = new Lottery(pool);Thread thread1 = new Thread(lottery, "抽奖箱1");Thread thread2 = new Thread(lottery, "抽奖箱2");thread1.start();thread2.start();}
}

        Lottery

package MultiProcessingExercise120240814;import java.util.ArrayList;
import java.util.Collections;
import java.util.concurrent.locks.ReentrantLock;public class Lottery implements Runnable{// 创建奖池private ArrayList<Integer> pool;// 构造方法初始化奖池public Lottery(ArrayList<Integer> pool) {this.pool = pool;}// 创建两个抽奖箱便于统计两个抽奖箱的奖项private ArrayList<Integer> list1 = new ArrayList<>();private ArrayList<Integer> list2 = new ArrayList<>();// 创建锁private final ReentrantLock lock = new ReentrantLock();@Overridepublic void run() {while (true) {lock.lock();try {if (pool.isEmpty()) {// 此时已经奖池已经空了,所以说抽奖完成,可以输出了int maxAward1 = Collections.max(list1);int maxAward2 = Collections.max(list2);if ("抽奖箱1".equals(Thread.currentThread().getName())) {System.out.println(Thread.currentThread().getName() + "中的最大奖是" + maxAward1);System.out.println(Thread.currentThread().getName() + ": " + list1);} else {System.out.println(Thread.currentThread().getName() + "中的最大奖是" + maxAward2);System.out.println(Thread.currentThread().getName() + ": " + list2);}if (maxAward1 > maxAward2) {System.out.println("抽奖箱1有更大的奖项————" + maxAward1);} else {System.out.println("抽奖箱2有更大的奖项————" + maxAward2);}break;} else {// 此时奖池还没空,继续抽奖try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}Collections.shuffle(pool);int prize = pool.removeFirst();if (prize != 0) {if (Thread.currentThread().getName().equals("抽奖箱1")) {list1.add(prize);} else {list2.add(prize);}}}} finally {lock.unlock();}}}
}//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.concurrent.locks.ReentrantLock;
//
//public class Lottery implements Runnable {
//    private ArrayList<Integer> pool;
//    private ArrayList<Integer> list1 = new ArrayList<>();
//    private ArrayList<Integer> list2 = new ArrayList<>();
//    private final ReentrantLock lock = new ReentrantLock();
//
//    public Lottery(ArrayList<Integer> pool) {
//        this.pool = pool;
//    }
//
//    @Override
//    public void run() {
//        while (true) {
//            lock.lock();
//            try {
//                if (pool.isEmpty()) {
//                    break;
//                }
//                Collections.shuffle(pool);
//                int prize = pool.removeFirst();
//                if (Thread.currentThread().getName().equals("抽奖箱1")) {
//                    list1.add(prize);
//                } else {
//                    list2.add(prize);
//                }
//            } finally {
//                lock.unlock();
//            }
//            try {
//                Thread.sleep(10);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//        }
//
//        lock.lock();
//        try {
//            int maxAward1 = list1.isEmpty() ? 0 : Collections.max(list1);
//            int maxAward2 = list2.isEmpty() ? 0 : Collections.max(list2);
//            if ("抽奖箱1".equals(Thread.currentThread().getName())) {
//                System.out.println(Thread.currentThread().getName() + "中的最大奖是" + maxAward1);
//                System.out.println(Thread.currentThread().getName() + ": " + list1);
//            } else {
//                System.out.println(Thread.currentThread().getName() + "中的最大奖是" + maxAward2);
//                System.out.println(Thread.currentThread().getName() + ": " + list2);
//            }
//            if (maxAward1 > maxAward2) {
//                System.out.println("抽奖箱1有更大的奖项————" + maxAward1);
//            } else {
//                System.out.println("抽奖箱2有更大的奖项————" + maxAward2);
//            }
//        } finally {
//            lock.unlock();
//        }
//    }
//}

 

相关文章:

Java 多线程练习2 (抽奖比较Runnable写法)

MultiProcessingExercise2 package MultiProcessingExercise120240814;import java.util.ArrayList; import java.util.Collections;public class MultiProcessingExercise1 {public static void main(String[] args) {// 需求&#xff1a;// 在此次抽奖过程中&#xff0c;抽奖…...

使用fastboot更新部分系统

使用fastboot更新部分系统 获取分区信息 > part list sunxi_flash 0Partition Map for UNKNOWN device 0 -- Partition Type: EFIPart Start LBA End LBA NameAttributesType GUIDPartition GUID1 0x00008000 0x000097c5 "boot-r…...

windows 加载portch遇到的错误

import torch 遇到如下错误 File "<stdin>", line 1, in <module> File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\torch\__init__.py", line 148, in <module> raise err OSError: [W…...

如何将 CICD 模版重构为 CICD component?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…...

数学建模——评价决策类算法(层次分析法、Topsis)

一、层次分析法 概念原理 通过相互比较确定各准则对于目标的权重, 及各方案对于每一准则的权重&#xff0c;这些权重在人的思维过程中通常是定性的, 而在层次分析法中则要给出得到权重的定量方法. 将方案层对准则层的权重及准则层对目标层的权重进行综合, 最终确定方案层对目标…...

KEEPALIVED 全csdn最详细----理论+实验(干货扎实,包教会的)

环境准备 主机名IP虚拟IP&#xff08;VIP&#xff09;功能ka1172.25.254.10172.25.254.100keepalived服务ka2172.25.254.20172.25.254.100keepalived服务realserver1172.25.254.110web服务realserver2172.25.254.120web服务 注意一定要关闭selinux,和防火墙&#xff0c;不然在…...

微信云开发云存储全部下载

一、安装 首先按照这个按照好依赖 安装 | 云开发 CloudBase - 一站式后端云服务 npm i -g cloudbase/cli 二、登录 tcb login 下载 首先在你要下载到的本地文件内创建一个名为&#xff1a;cloudbaserc.json 的json文件。 填入你的id {"envId":"你的云开发环…...

vos3000怎样对接voip落地语音网关呢?卡机和O口网关的配置技巧有哪些?

很多朋友没有接触过vos系统的使用&#xff0c;那么vos3000如何对接voip落地网关呢&#xff1f;卡机的配置技巧有哪些&#xff1f; VOS3000系统是针对中小等规模VoIP运营业务提供的支撑系统。 语音网关 落地网关分O口网关&#xff0c;S口网关&#xff0c;和全网通GOIP语音网关。…...

MySQL数据库专栏(四)数据库操作

1、创建数据库 create database if not exists [数据库名称] character set [字符集] COLLATE [排序规则]; 例如&#xff1a;create database if not exists db_demo character set utf8mb4 COLLATE utf8mb4_general_ci; if not exists&#xff1a;判断数据库是否存在&#x…...

Python编写Word文档

目录 0. 安装依赖 1. 创建word文档 2. 添加标题、居中、字体16大小 3. 添加标题一 4. 添加一段话并设置字体颜色 封装函数 5. 换页 6. 插入表格 0. 安装依赖 python-docx1.1.2 1. 创建word文档 from docx import Documentdoc Document() 2. 添加标题、居中、字体1…...

聚星文社AI工具

聚星文社AI工具是一款基于人工智能技术的文学创作辅助工具。聚星文社AI工具https://docs.qq.com/doc/DRU1vcUZlanBKR2xy 它能够帮助作者生成文字内容、自动校对、提供创作灵感等功能。 通过聚星文社AI工具&#xff0c; 作者可以更快速地完成文学作品的创作&#xff0c;提高创…...

思科OSPF动态路由配置8

#路由协议实现# #任务八OSPF动态路由配置8# 开放式最短路径优先&#xff08;Open Shortest Path First,OSPF&#xff09;协议是目前网络中应用最广泛的动态路由协议之一。它也属于内部网关路由协议&#xff0c;能够适应各种规模的网络环境&#xff0c;是典型的链路状态路由协…...

C++(10)类语法分析(1)

C(10)之类语法分析(1) Author: Once Day Date: 2024年8月17日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 …...

python语言day6 os random datetime .ini文件

os&#xff1a; 获取运行当前py文件的绝对路径&#xff1a; abspath中添加路径&#xff0c;会直接和绝对路径拼接。 folder_path os.path.abspath("") print(folder_path) 路径拼接&#xff1a; mac系统路径&#xff1a;file/TranslucentTB win系统路径&#xff1a;…...

powershell 终端 执行 pnpm -v报错

1.问题描述&#xff1a; 明明全局已安装 pnpm &#xff0c;但在vscode默认终端 powershell 执行 pnpm -v 却报错&#xff1a; 2.问题根因&#xff1a; 原因是 PowerShell 执行策略问题。 3.解决方案&#xff1a; 以管理员身份运行 PowerShell 查看 PowerShell 的执行策略…...

最新保姆级Anaconda和Pycharm安装激活过程(2024最新版本)

Anaconda和Pycharm安装过程 Anaconda安装过程第一步第二步第三步第四步第五步第六步第七步第八步第九步Pycharm 安装过程&#xff1a;第一步第二步第三步第四步第五步第六步---激活过程第七步第八步第九步第十步第十一步第十二步第十三步第十四步Anaconda和Pycharm软件百度网盘…...

虚幻5|布料模拟

打开骨骼网格体 1.Mass Prooerties 如果给角色施加风力&#xff0c;密度越大越难飘&#xff0c;相反密度越小飘动浮度也小 2.Material Proerties Edge Stiffness,对衣服的折痕处的调整&#xff0c;其值越大就越能维持原本的折痕&#xff0c;相反折痕就会变小&#xff0c;但…...

K8S 存储

K8S&#xff08;Kubernetes&#xff09;的存储是容器化应用程序中非常重要的一部分&#xff0c;它帮助用户在不同场景下管理和存储数据。K8S提供了多种存储方式&#xff0c;以满足不同的存储需求。以下是对K8S存储的详细解析&#xff1a; 一、K8S存储类型 K8S的存储类型主要分…...

Kafka Manager支持jdk1.8的部署和使用

一、Kafka Manager简介 Kafka Manager 可能是现在能找到的最好的可视化的Kafka管理工具, 感谢Yahoo的开源; 使用Kafka Manager, 基本上之前需要运行Kafka相应命令行工具的工作现在都可以可视化的完成:创建Topic, 调整消息保存时长, Partition数量等等配置;管理Topic, 包括Reas…...

vmware和virtualbox优缺点

vmware和virtualbox优缺点 &#xff0c;都可以搭建本地虚拟机&#xff0c;他们有什么优缺点&#xff0c;两个都用过 &#xff0c;本次打算直接用virtualbox搭建本地虚拟机&#xff0c;比较轻量级 VirtualBox的优点&#xff1a; 免费使用&#xff1a;VirtualBox是一…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...