java多线程模拟售票,多个窗口售票

本文通过Java多线程技术实现了一个模拟多个售票窗口同步售票的示例程序。该程序使用了synchronized关键字来确保线程间的同步操作,避免了票务混乱的情况发生。通过创建四个不同的售票线程并共享同一个票数资源,演示了如何在并发环境下正确处理资源的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.ma.thread001;
/**
 * 多线程模拟售票,多个窗口售票
 * @author ma
 *
 */
public class SellTicktDemo implements  Runnable {


	/*
	 * 需求:多线程模拟售票,多个窗口售票
	 * 
	 * 分析:
	 * 	A.需要的类
	 * 		1.建立一个多线程的类SellTicktDemo 
	 * 		2.创建一个测试类SellTicktDemoTest
	 * 	B.类的关系
	 * 		1.多线程的类SellTicktDemo,实现Runnable接口,重写run()方法
	 * 		2.SellTicktDemoTest 测试多线程类
	 * 	C.实现多线程同步
	 * 		1.用synchronized()方法实现线程同步
	 * 	D.在SellTicktDemoTest中实现多数窗口
	 * 		
	 */
	
	//定义票的总数
	private int total = 100;
	
	//定义票的编号
	private int no = total+1;
	
	//定义一个线程同步对象
	private Object obj = new Object();
	
	@Override
	public void run() {
		
		while(true){
			//同步锁
			synchronized(this.obj){
				if(this.total > 0){
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					String msg = Thread.currentThread().getName()+" 售出第   "+(this.no -this.total) +"  张票";
					System.out.println(msg);
					this.total--;
				}else{
					System.out.println("票已售完,请下次再来!");
					System.exit(0);
				}
			}
		}
		
	}
}

  

package com.ma.thread001;
/**
 * 测试类
 * @author ma
 *
 */
public class SellTicktDemoTest {
	
	public static void main(String[] args) {
		
		//得到对象
		SellTicktDemo std = new SellTicktDemo();
		
		//把对象放入线程中
		Thread t1 = new Thread(std,"售票窗口1");
		Thread t2 = new Thread(std,"售票窗口2");
		Thread t3 = new Thread(std,"售票窗口3");
		Thread t4 = new Thread(std,"售票窗口4");
		
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		
		
	}

}

  输出结果:

售票窗口1 售出第 1 张票
售票窗口4 售出第 2 张票
售票窗口4 售出第 3 张票
售票窗口4 售出第 4 张票
售票窗口3 售出第 5 张票
售票窗口3 售出第 6 张票
售票窗口3 售出第 7 张票
售票窗口3 售出第 8 张票
售票窗口3 售出第 9 张票
售票窗口3 售出第 10 张票
售票窗口3 售出第 11 张票
售票窗口3 售出第 12 张票
售票窗口3 售出第 13 张票
售票窗口3 售出第 14 张票
售票窗口3 售出第 15 张票
售票窗口3 售出第 16 张票
售票窗口3 售出第 17 张票
售票窗口3 售出第 18 张票
售票窗口2 售出第 19 张票
售票窗口3 售出第 20 张票
售票窗口3 售出第 21 张票
售票窗口3 售出第 22 张票
售票窗口4 售出第 23 张票
售票窗口1 售出第 24 张票
售票窗口4 售出第 25 张票
售票窗口4 售出第 26 张票
售票窗口4 售出第 27 张票
售票窗口4 售出第 28 张票
售票窗口4 售出第 29 张票
售票窗口3 售出第 30 张票
售票窗口2 售出第 31 张票
售票窗口2 售出第 32 张票
售票窗口2 售出第 33 张票
售票窗口2 售出第 34 张票
售票窗口3 售出第 35 张票
售票窗口3 售出第 36 张票
售票窗口4 售出第 37 张票
售票窗口1 售出第 38 张票
售票窗口1 售出第 39 张票
售票窗口1 售出第 40 张票
售票窗口4 售出第 41 张票
售票窗口4 售出第 42 张票
售票窗口3 售出第 43 张票
售票窗口3 售出第 44 张票
售票窗口3 售出第 45 张票
售票窗口3 售出第 46 张票
售票窗口3 售出第 47 张票
售票窗口3 售出第 48 张票
售票窗口2 售出第 49 张票
售票窗口2 售出第 50 张票
售票窗口3 售出第 51 张票
售票窗口3 售出第 52 张票
售票窗口4 售出第 53 张票
售票窗口1 售出第 54 张票
售票窗口1 售出第 55 张票
售票窗口4 售出第 56 张票
售票窗口4 售出第 57 张票
售票窗口3 售出第 58 张票
售票窗口3 售出第 59 张票
售票窗口3 售出第 60 张票
售票窗口3 售出第 61 张票
售票窗口3 售出第 62 张票
售票窗口2 售出第 63 张票
售票窗口2 售出第 64 张票
售票窗口2 售出第 65 张票
售票窗口2 售出第 66 张票
售票窗口2 售出第 67 张票
售票窗口2 售出第 68 张票
售票窗口3 售出第 69 张票
售票窗口3 售出第 70 张票
售票窗口3 售出第 71 张票
售票窗口3 售出第 72 张票
售票窗口3 售出第 73 张票
售票窗口4 售出第 74 张票
售票窗口1 售出第 75 张票
售票窗口1 售出第 76 张票
售票窗口1 售出第 77 张票
售票窗口1 售出第 78 张票
售票窗口1 售出第 79 张票
售票窗口1 售出第 80 张票
售票窗口1 售出第 81 张票
售票窗口1 售出第 82 张票
售票窗口4 售出第 83 张票
售票窗口4 售出第 84 张票
售票窗口4 售出第 85 张票
售票窗口4 售出第 86 张票
售票窗口3 售出第 87 张票
售票窗口3 售出第 88 张票
售票窗口3 售出第 89 张票
售票窗口2 售出第 90 张票
售票窗口3 售出第 91 张票
售票窗口3 售出第 92 张票
售票窗口3 售出第 93 张票
售票窗口3 售出第 94 张票
售票窗口3 售出第 95 张票
售票窗口4 售出第 96 张票
售票窗口1 售出第 97 张票
售票窗口1 售出第 98 张票
售票窗口4 售出第 99 张票
售票窗口4 售出第 100 张票
票已售完,请下次再来!

转载于:https://www.cnblogs.com/majingang/p/9055669.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值