车站售票 代码实现火车站3个窗口同时卖25张车票的逻辑,同一个窗口不能卖同一张票 提示:synchronized修饰成员方法时,则一个线程要执行该方法,必须取得该方法所在的对象的锁,即某个synchronized成员方法被调用时,其它synchronized成员方法不可被调用。 提交:代码截图。 参考代码结构如下 public class TicketDemo { public static void main(String[] args) { } } /** * ticket类,有销售票方法sales()。每售出一张票,票的总数减一 */ class Ticket{ private int ticketNumber = 25; }
时间: 2024-02-07 18:03:56 浏览: 70
以下是实现火车站3个窗口同时卖25张车票的Java代码,每个窗口分别在不同的线程中执行:
```java
public class TicketDemo {
public static void main(String[] args) {
Ticket ticket = new Ticket();
Thread window1 = new Thread(() -> {
for (int i = 0; i < 25; i++) {
ticket.sales(1);
}
});
Thread window2 = new Thread(() -> {
for (int i = 0; i < 25; i++) {
ticket.sales(2);
}
});
Thread window3 = new Thread(() -> {
for (int i = 0; i < 25; i++) {
ticket.sales(3);
}
});
window1.start();
window2.start();
window3.start();
}
}
class Ticket {
private int ticketNumber = 25;
public synchronized void sales(int windowNumber) {
if (ticketNumber > 0) {
// 模拟售票时间
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("窗口" + windowNumber + "售出第" + (26 - ticketNumber) + "张票");
ticketNumber--;
}
}
}
```
在Ticket类中,使用synchronized修饰sales()方法,保证了同一个线程在执行该方法时,其它线程不能同时执行该方法。每个窗口在不同的线程中执行sales()方法,通过传入窗口号,可以在输出中区分出售票的窗口。同时对售出的票的总数进行了控制,保证不会售出超过25张的票。
阅读全文