查看本章节

查看作业目录


需求说明:

车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程,要求使用同步方法保证售票过程中票数的正确性

实现思路:

  1. 创建 Java 项目,在项目中创建 SellTicketBySync 类,并实现 Runnable 接口
  2. 定义 int 类型的变量 ticket,表示剩余的车票数量,ticket 初始值为 50
  3. 创建同步方法 sellTicket()。在该方法体内,判断 ticket 的值是否大于 0。如果 ticket 的值大于 0,则调用Thread.sleep(long mills) 方法,让线程休眠 50 毫秒,并打印出当前窗口的售票情况
  4. 重写 run() 方法。在 run() 方法内,定义一个 while 死循环。在循环体内,判断变量 ticket 是否大于 0,如果 ticket 大于 0,调用 sellTicket() 方法。如果 ticket 小于等于 0,则结束循环
  5. 编写测试类,使用 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();
}
}

最新文章

  1. BZOJ2109: [Noi2010]Plane 航空管制
  2. Python Day2
  3. IOS 关于开发的APP跳转第三方应用的心得
  4. 检测Java程序运行时间的2种方法(高精度的时间[纳秒]与低精度的时间[毫秒])
  5. Atitit.jsou html转换纯文本 java c# php
  6. centos 单独安装PHP的mysql和mysqli扩展
  7. C#用天气预报的WebServices
  8. Select模型原理
  9. 嵌入式linux无线网卡的使用
  10. 权限系统与RBAC模型概述
  11. SVG彩虹字
  12. Android 开发笔记___AutoComplateTextView__自动完成文本框
  13. Java 读书笔记 (十四) Java 方法
  14. SQL SERVER 2012 AlwaysOn– 数据库层面 02
  15. luogu P5289 [十二省联考2019]皮配
  16. mysqldump 和mysqlbinlog
  17. Error: Cannot find module 'babel-helpers'
  18. NFS安装及优化过程--centos6.6
  19. python 元类(metaclass)
  20. Apache Hadoop 源码阅读(陆续更新)

热门文章

  1. tomcat 之 httpd session stiky
  2. CentOS Linux下编译安装MySQL
  3. spring jdbc 配置数据源连接数据库
  4. Linux系统下部署eleasticsearch+kibana
  5. Java Bean 与Spring Bean 的区别
  6. 【转】在本地运行leetcode核心代码
  7. 如何用three.js实现数字孪生、3D工厂、3D工业园区、智慧制造、智慧工业、智慧工厂-第十课
  8. 【kafka学习笔记】kafka的基本概念
  9. 配置yum代理
  10. .NET内存性能分析宝典