有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 int [] arr = {10,5,20,50,100,200,500,800,2,80,300}; 创建两个抽奖箱(线程)设置线程名称

本文主要是介绍有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 int [] arr = {10,5,20,50,100,200,500,800,2,80,300}; 创建两个抽奖箱(线程)设置线程名称,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:抽奖池抽奖

  • 一、题目描述:
  • 二、核心代码如下:
  • 三、代码运行结果如下:

一、题目描述:

  有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 int [] arr = {10,5,20,50,100,200,500,800,2,80,300};创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱 1”,“抽奖箱 2”,随机从 arr 数组中获取奖项元素并打印在控制台上,但是最终相同金额不能抽取多次。
  注意:随机数获取使用 Math.random() 可以得到一个 [0,1) 的随机小数。返回格式如下:
抽奖箱1 又产生了一个 10 元大奖
抽奖箱2 又产生了一个 50 元大奖

二、核心代码如下:

package homework10.homework1025;
/*** 有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 int [] arr = {10,5,20,50,100,200,500,800,2,80,300};* 创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱 1”,“抽奖箱 2”,随机从 arr 数组中获取奖项元素并打印在控制台上,但是最终相同金额不能抽取多次。* 注意:随机数获取使用 Math.random() 可以得到一个 [0,1) 的随机小数。返回格式如下:* 抽奖箱1 又产生了一个 10 元大奖* 抽奖箱2 又产生了一个 50 元大奖*/
public class Demo01 {public static void main(String[] args) {lotteryPool lottery = new lotteryPool();//实例化对象Thread t1 = new Thread(lottery,"抽奖箱1");Thread t2 = new Thread(lottery,"抽奖箱2");t1.start();//启动线程t2.start();//启动线程}
}
class lotteryPool extends Thread{int [] arr = {10,5,20,50,100,200,500,800,2,80,300};boolean[] flag = new boolean[arr.length];//创建一个Boolean型数组int length = 0;public void run(){while(length<arr.length){//当下标达到Boolean型数组的arr.length-1时,数据已取完,跳出循环try {Thread.sleep(1000);//每次线程休眠一秒再执行} catch (InterruptedException e) {e.printStackTrace();}int index = (int) (Math.random() * arr.length);//获取随机Boolean型数组的下标并获取相同位置上的arr数组的值synchronized (this){if(!flag[index]){System.out.println(Thread.currentThread().getName()+"又产生了一个"+arr[index]+"元大奖");flag[index]=true;//Boolean数组已经取过值的位置赋值为truelength++;//每取出一个值长度加一,当下标值达到Boolean型数组的长度减一时,证明已经取完。}}}}
}

三、代码运行结果如下:

在这里插入图片描述

这篇关于有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组 int [] arr = {10,5,20,50,100,200,500,800,2,80,300}; 创建两个抽奖箱(线程)设置线程名称的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/775019

相关文章

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问