编写Java程序,车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程,使用Runnable解决线程安全问题
2024-09-02 01:35:53
查看本章节
查看作业目录
需求说明:
车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程,要求使用同步方法保证售票过程中票数的正确性
实现思路:
- 创建 Java 项目,在项目中创建 SellTicketBySync 类,并实现 Runnable 接口
- 定义 int 类型的变量 ticket,表示剩余的车票数量,ticket 初始值为 50
- 创建同步方法 sellTicket()。在该方法体内,判断 ticket 的值是否大于 0。如果 ticket 的值大于 0,则调用Thread.sleep(long mills) 方法,让线程休眠 50 毫秒,并打印出当前窗口的售票情况
- 重写 run() 方法。在 run() 方法内,定义一个 while 死循环。在循环体内,判断变量 ticket 是否大于 0,如果 ticket 大于 0,调用 sellTicket() 方法。如果 ticket 小于等于 0,则结束循环
- 编写测试类,使用 new Thread(Runnable target,String name) 构造方法,创建 3 条线程,参数 target的值为 runnableInstance,指定窗口名称并赋值给参数 name。调用 3 个线程对象的 start() 方法,依次启动 3条线程
实现代码:
public class SellTicketBySync implements Runnable {
private int ticket = 50;//剩余的票数
//重写run方法
@Override
public void run() {
while (true) {
if (this.ticket > 0) {
SellTicket();
} else {
break;
}
}
}
public synchronized void SellTicket() {
if (ticket > 0) {
try {
//线程休眠50毫秒
Thread.sleep(50);
System.out.println(Thread.currentThread().getName()+"出售第"+ticket--+"张车票");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
//创建一个Runnable实例
SellTicketBySync sellTicketBySync = new SellTicketBySync();
//创建3条线程,并为3条线程指定名称
Thread thread01 = new Thread(sellTicketBySync,"窗口1");
Thread thread02 = new Thread(sellTicketBySync,"窗口2");
Thread thread03 = new Thread(sellTicketBySync,"窗口3");
thread01.start();
thread02.start();
thread03.start();
}
}
最新文章
- BZOJ2109: [Noi2010]Plane 航空管制
- Python Day2
- IOS 关于开发的APP跳转第三方应用的心得
- 检测Java程序运行时间的2种方法(高精度的时间[纳秒]与低精度的时间[毫秒])
- Atitit.jsou html转换纯文本 java c# php
- centos 单独安装PHP的mysql和mysqli扩展
- C#用天气预报的WebServices
- Select模型原理
- 嵌入式linux无线网卡的使用
- 权限系统与RBAC模型概述
- SVG彩虹字
- Android 开发笔记___AutoComplateTextView__自动完成文本框
- Java 读书笔记 (十四) Java 方法
- SQL SERVER 2012 AlwaysOn– 数据库层面 02
- luogu P5289 [十二省联考2019]皮配
- mysqldump 和mysqlbinlog
- Error: Cannot find module 'babel-helpers'
- NFS安装及优化过程--centos6.6
- python 元类(metaclass)
- Apache Hadoop 源码阅读(陆续更新)