编写一个java多线程程序,模拟火车售票窗口的售票功能,创建线程一和线程二,通过这两个线程共同售出100张票
时间: 2023-10-25 08:15:18 浏览: 115
好的,我可以为您编写一个简单的Java多线程程序,模拟火车售票窗口的售票功能。请注意,这只是一个示例程序,您可以根据需要进行修改和优化。
```java
public class TrainTicket implements Runnable {
private int tickets = 100; // 总共有100张票
private static Object lock = new Object(); // 创建一个对象锁
@Override
public void run() {
while (true) {
synchronized (lock) {
if (tickets > 0) { // 还有票,继续售票
System.out.println(Thread.currentThread().getName() + "售出第" + tickets + "张票");
tickets--;
} else { // 没有票了,退出售票
break;
}
}
try {
Thread.sleep(100); // 模拟售票的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
TrainTicket tt = new TrainTicket();
Thread t1 = new Thread(tt, "售票窗口一");
Thread t2 = new Thread(tt, "售票窗口二");
t1.start();
t2.start();
}
}
```
在这个程序中,我们创建了一个 `TrainTicket` 类来模拟火车售票窗口的售票功能。类中有一个 `tickets` 变量表示剩余的票数,以及一个静态的 `lock` 对象作为对象锁。
我们实现了 `Runnable` 接口,并重写了 `run()` 方法,在方法中使用 synchronized 关键字来获取对象锁,防止多个线程同时访问变量。
在 `main()` 方法中,我们创建了两个线程并启动它们,这两个线程共同售出100张票。
当一个线程成功获取到锁并售出一张票后,会睡眠100毫秒模拟售票的时间。如果票已经售完了,这个线程会退出售票。
注意,这个程序中只使用了一个对象锁,因此只有一个线程可以进入 synchronized 块。如果需要多个线程同时进入不同的 synchronized 块,可以使用多个对象锁。
阅读全文