java 模拟售票,多线程的同步与互斥的代码

本文介绍了一个使用Java实现的售票系统,该系统通过多线程技术模拟了售票过程,并深入探讨了多线程环境下的同步与互斥问题。文章详细展示了如何利用synchronized关键字和wait()、notify()等方法来确保线程之间的正确同步,防止出现并发错误。

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

如下内容内容是关于java 模拟售票,多线程的同步与互斥的内容。 public class SaleTicket {

public static void main(String[] args) {
	Ticket t = new Ticket(50);
	set.start();
	for (int i = 1; i <= 52; i++) {
		getTicket get = new getTicket(t, "买票者  " + i + " ");
		get.start();
	}
}
复制代码

} class Ticket {

public Ticket(int ticketNum) {
	this.ticketNum = ticketNum;
}

public synchronized void getTicket(String name) throws InterruptedException {
	while (!write && read) {
				+ " 买票等待。。。");
		this.wait();
	}
	if (ticketNum > 0) {
				+ " 买票成功,号码=" + ticketNum);
		this.notifyAll();
		read = false;
				+ " 没有买到票");
	}
}

public synchronized void sellTicket(String name)
		throws InterruptedException {
	while (ticketNum > 0) {
		while (write) {
			System.out.println(name + " 处理业务,售票等待。。。");
			this.wait();
		}
		if (ticketNum > 0) {
			System.out.println(name + " 开始售票,号码=" + ticketNum);
		}
		write = true;
		this.notifyAll();
	}
	System.out.println(name + " 对不起,售票已经售完!");
}

public void subTicketNum() {
	if (this.ticketNum > 0)
		this.ticketNum = this.ticketNum - 1;
}

public int getTicketNum() {
	return ticketNum;
}
复制代码

}

class getTicket extends Thread {

public getTicket(Ticket d, String name) {
	this.d = d;
	this.name = name;
}

public void run() {
	try {
		d.getTicket(name);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}
复制代码

}

class setTicket extends Thread { Ticket d;

public setTicket(Ticket d) {
	this.d = d;
}

public void run() {
	try {
		d.sellTicket("售票员 1 ");
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}
复制代码

}

转载于:https://juejin.im/post/5c344623f265da612e28d066

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值