java实现线程同步模拟火车站4个窗口同时卖50张票
时间: 2023-12-10 10:06:06 浏览: 104
可以使用Java中的同步机制来实现线程同步,保证多个线程同时访问共享资源时的正确性。
下面是一个简单的示例代码,模拟4个窗口同时卖50张票的情况:
```java
public class Station implements Runnable {
private static int tickets = 50; // 初始票数
private static Object lock = new Object(); // 定义一个锁对象
private String name;
public Station(String name) {
this.name = name;
}
@Override
public void run() {
while (true) {
synchronized (lock) { // 同步代码块
if (tickets > 0) { // 还有余票
System.out.println(name + "售出第" + tickets + "张票");
tickets--;
} else { // 没有余票
System.out.println(name + "已售罄");
break;
}
}
}
}
}
```
在这个示例中,我们使用了一个静态变量`tickets`来表示当前剩余的票数。在`run`方法中,每个线程都会进入一个同步代码块中,使用`lock`对象作为锁。在同步代码块中,首先判断当前是否还有余票,如果有,则售出一张票;否则就退出循环。
下面是一个测试代码,启动4个线程模拟4个售票窗口:
```java
public class Test {
public static void main(String[] args) {
Station station = new Station("");
new Thread(station, "窗口1").start();
new Thread(station, "窗口2").start();
new Thread(station, "窗口3").start();
new Thread(station, "窗口4").start();
}
}
```
运行该测试代码,可以看到如下输出:
```
窗口1售出第50张票
窗口2售出第49张票
窗口3售出第48张票
窗口1售出第47张票
窗口2售出第46张票
窗口4售出第45张票
窗口3售出第44张票
窗口2售出第43张票
窗口1售出第42张票
...
```
可以看到,4个窗口在同时售票时,没有出现重复售票的情况,证明了线程同步的正确性。
阅读全文
相关推荐















