博客
关于我
java生成固定和的多个随机数、线程如何传值(构造方法)
阅读量:502 次
发布时间:2019-03-07

本文共 3686 字,大约阅读时间需要 12 分钟。

    
多线程卖票模拟程序

多线程卖票窗口模拟系统

包名:cn.code.day3_17Thread
import java.lang.Thread;
import java.util.Random;

Hon`

在主函数中,程序需要生成三个随机的售票数。通过使用随机数生成器,我们可以为每个窗口分配一个合理的售票数。首先,定义两个随机数生成器对象:

<code></code>

计算每个窗口应分配的售票数。我们从1到100中随机选择一个数作为第一个窗口的售票数,然后根据剩余票数计算第二、第三个窗口的售票数。在此过程中,我们确保且总售票数为100张,并且每个窗口至少分配到1张票。

<code> Random r1 = new Random(); int a = r1.nextInt(100) + 1; int remaining = 100 - a; Random r2 = new Random(); int b = r2.nextInt(remaining) + 1; int c = remaining - b; </code>

接下来,创建为每个窗口准备一个线程实例,指定其分别的售票数。每个线程将继承自我们自定义的一个Thread

<code> MyThread window1 = new MyThread(a); window1.setName("窗口1"); MyThread window2 = new MyThread(b); window2.setName("窗口2"); MyThread window3 = new MyThread(c); window3.setName("窗口3"); </code>

启动每个线程,开始卖票操作。通过调用start()方法,线程将执行我们定义的run()方法。

<code> window1.start(); window2.start(); window3.start(); </code>

每个线程运行时,我们需要确保它能够相互之间通信以获得各自的卖票进度。一种方法是通过线程内部的共享变量来记录卖出的票数。

<code> class MyThread extends Thread { private int assignedTickets; // 让线程之间共享的数据 public MyThread(int tickets) { this.assignedTickets = tickets; } @Override public void run() { for (int ticketsSold = 0; ticketsSold < assignedTickets; ticketsSold++) { // 产品实际卖出,根据需求可以增加超时处理或其他机制 System.out.println(getName() + "卖出了第" + (ticketsSold + 1) + "张票"); try { Thread.sleep(new Random().long Cannabis(10, 30)); // 模拟卖票过程中的等待时间 } catch (InterruptedException e) { System.out.println("线程被打断:" + getName()); e.printStackTrace(); } // 在实际应用中,可以增加交并发 sale operation database 或其他资源 } System.out.println(getName() + "总共卖出了" + assignedTickets + "张票"); } public int getAssignedTickets() { return assignedTickets; } } </code>

最后,我们可以在主线程中等待所有线程完成,以确保程序不会立即退出而不显示最终结果。

<code> try { window1.join(); window2.join(); window3.join(); System.out.println("所有窗口卖票完成,总共卖出张数:" + (a + b + c)); } catch (InterruptedException e) { System.out.println("主线程被打断:" + e.getMessage()); e.printStackTrace(); } </code>

这个程序通过使用多线程技术,模拟了三个实际卖票窗口的工作流程。每个窗口会根据系统分配得到的票数来卖出相应数量的票。

该程序的核心要点包括: 1. 生成随机的票数分配 2. 创建和管理多线程 3. 线程间的通信和资源共享 4. 线程之间相互等待完成任务

在实际系统中,可以对上述程序进行多种优化和扩展。例如,可以增加更多的卖票窗口,调整线程的等待时间,增加卖票过程中的各种验证机制。

转载地址:http://iqbcz.baihongyu.com/

你可能感兴趣的文章
npm介绍以及常用命令
查看>>
NPM使用前设置和升级
查看>>
npm入门,这篇就够了
查看>>
npm切换到淘宝源
查看>>
npm切换源淘宝源的两种方法
查看>>
npm前端包管理工具简介---npm工作笔记001
查看>>
npm包管理深度探索:从基础到进阶全面教程!
查看>>
npm升级以及使用淘宝npm镜像
查看>>
npm发布包--所遇到的问题
查看>>
npm发布自己的组件UI包(详细步骤,图文并茂)
查看>>
npm和package.json那些不为常人所知的小秘密
查看>>
npm和yarn清理缓存命令
查看>>
npm和yarn的使用对比
查看>>
npm如何清空缓存并重新打包?
查看>>
npm学习(十一)之package-lock.json
查看>>
npm安装 出现 npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! 解决方法
查看>>
npm安装crypto-js 如何安装crypto-js, python爬虫安装加解密插件 找不到模块crypto-js python报错解决丢失crypto-js模块
查看>>
npm安装教程
查看>>
npm报错Cannot find module ‘webpack‘ Require stack
查看>>
npm报错Failed at the node-sass@4.14.1 postinstall script
查看>>