运用创建多线程实现三个售票窗口同时售票
时间: 2023-08-05 08:19:47 浏览: 54
好的,以下是使用Java多线程实现三个售票窗口同时售票的例子:
```java
public class TicketSeller implements Runnable {
private int tickets = 100;
@Override
public void run() {
while (tickets > 0) {
synchronized (this) {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "售出第" + tickets + "张票");
tickets--;
}
}
try {
Thread.sleep(100); // 每售出一张票暂停100毫秒,模拟售票过程中的操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
TicketSeller ticketSeller = new TicketSeller();
Thread t1 = new Thread(ticketSeller, "窗口1");
Thread t2 = new Thread(ticketSeller, "窗口2");
Thread t3 = new Thread(ticketSeller, "窗口3");
t1.start();
t2.start();
t3.start();
}
}
```
在这个例子中,我们定义了一个TicketSeller类,实现了Runnable接口并重写了run方法。在run方法中,我们使用synchronized关键字来保证售票的原子性,使得每次只有一个线程可以进入临界区(即售票过程),避免了多个线程同时访问tickets变量从而引发的竞态问题。
在main方法中,我们创建了三个Thread对象,并将TicketSeller对象作为Runnable参数传入,以便于三个线程可以共享同一个TicketSeller对象,从而实现三个售票窗口同时售票。然后启动三个线程,即可看到三个售票窗口同时售票的效果。