假定商洛市火车北站针对绿巨人开发需要开发一个多窗口、多平台的售票程序,请你使用java语言,根据线程的数据共享方法,编写程序实现3个窗口同时售票的多线程程序
时间: 2024-01-21 12:18:48 浏览: 22
以下是一个简单的Java程序示例,实现了3个窗口同时售票的多线程程序。使用了线程锁来保证数据共享的正确性。
```java
import java.util.concurrent.locks.ReentrantLock;
public class TicketSeller implements Runnable {
private static int tickets = 100; // 总票数
private static int count = 0; // 已售票数
private static ReentrantLock lock = new ReentrantLock(); // 线程锁
private int windowId; // 窗口编号
public TicketSeller(int id) {
this.windowId = id;
}
public void run() {
while (count < tickets) {
lock.lock(); // 获取线程锁
if (count < tickets) {
count++;
System.out.println("窗口" + windowId + "售出第" + count + "张票");
}
lock.unlock(); // 释放线程锁
try {
Thread.sleep(100); // 模拟售票时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Thread(new TicketSeller(1)).start(); // 开启窗口1
new Thread(new TicketSeller(2)).start(); // 开启窗口2
new Thread(new TicketSeller(3)).start(); // 开启窗口3
}
}
```
在这个程序中,每个售票窗口都是一个独立的线程,通过锁来保证对共享数据的访问的互斥性。当一台窗口正在售票时,其他窗口会等待线程锁的释放。同时,在售票时使用了一个sleep()函数来模拟售票时间。