/**
* 模拟多人不同面值购票找零的多线程代码。
*/
public class T {
static SalesLady saleslady = new SalesLady(14, 0, 0);
public static void main(String[] args) {
new T().start();
}
public void start() {
int moneies[] = { 10, 10, 5, 10, 5, 10, 5, 5, 10, 5, 10, 5, 5, 10, 5 };
Thread[] aThreadArray = new Thread[20];
System.out.println("现在开始售票:");
for (int i = 0; i < moneies.length; i++) {
aThreadArray[i] = new Thread(new CustomerClass(i + 1, moneies[i]));
aThreadArray[i].start();
}
for (int i = 0; i < moneies.length; i++) {
try {
aThreadArray[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("票已售完" + saleslady.memontoes);
}
}
// 顾客 销售人员
class SalesLady {
int memontoes, five, ten;
public synchronized String ruleForSale(int num, int money) {
String s = null;
if (memontoes <= 0)
return "对不起,已经售完";
if (money == 5) {
memontoes--;
five++;
s = "给你票,你的钱正好。";
notifyAll();
} else if (money == 10) {
while (five < 1) {
try {
System.out.println("" + num + "号顾客用10元购票,请等待");
wait();
} catch (InterruptedException e) {
}
// 如果你的线程能够运行到这里,那么一定有一个five,此时就看哪个线程先被执行了
// 因为是同步方法,其中获得运行权利的线程,必须运行结束才会让其它的线程运行
// 所以当再次判断时,那个finve又没有了。
// 不会出现没有five却找零的问题。
}
// 如果你的线程能够运行到这里,那么其一定有一个five,
// 所以这个线程不会出现没有five而找零的问题
if (memontoes <= 0) {
return "对不起,已经售完";
}
memontoes--;
five -= 1;
ten++;
s = "给你票,找你5元。";
}
return s;
}
SalesLady(int m, int f, int t) {
memontoes = m;
five = f;
ten = t;
}
}
// 顾客
class CustomerClass implements Runnable {
int num, money;
public void run() {
System.out.println("我是" + num + "号顾客,用" + money + "元购票,售票员说:"
+ T.saleslady.ruleForSale(num, money));
}
CustomerClass(int n, int m) {
num = n;
money = m;
}
}
模拟多人不同面值购票找零的多线程代码(java版)
5星 · 超过95%的资源 需积分: 20 91 浏览量
2008-10-18
21:14:58
上传
评论 1
收藏 1KB RAR 举报
wangjun_pfc
- 粉丝: 252
- 资源: 124
最新资源
- 软件仿真多机串行通信.doc
- Python大作业:音乐播放软件(爬虫+可视化+数据分析+数据库)
- 课程设计-python爬虫-爬取日报,爬取日报文章后存储到本地,附带源代码+课程设计报告
- 软件和信息技术服务行业投资与前景预测.pptx
- 课程设计-基于SpringBoot + Mybatis+python爬虫NBA球员数据爬取可视化+源代码+文档+sql+效果图
- 软件品质管理系列二项目策划规范.doc
- 基于TensorFlow+PyQt+GUI的酒店评论情感分析,支持分析本地数据文件和网络爬取数据分析+源代码+文档说明+安装教程
- 软件定义无线电中的模拟电路测试技术.pptx
- 软件开发协议(作为技术开发合同附件).doc
- 软件开发和咨询行业技术趋势分析.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈