编写Java程序,车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程,使用Runnable解决线程安全问题

   日期:2020-09-28     浏览:97    评论:0    
核心提示:查看本章节查看作业目录需求说明:车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程,要求使用同步方法保证售票过程中票数的正确性实现思路:创建 Java 项目,在项目中创建 SellTicketBySync 类,并实现 Runnable 接口 定义 int 类型的变量 ticket,表示剩余的车票数量,ticket 初始值为 50 创建同步方法 sellTicket()。在该方法体内,判断 ticket 的值是否大于 0。如果 ticket 的值大于

查看本章节

查看作业目录

需求说明:

车站只剩 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();
	}
}

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服