java使用3个线程模拟电影院3个窗口同时卖票的过程,总票数量为100张。在卖票的过程要考虑到线程同步的问题,不能出现多卖、少卖、重复卖票的情况。
时间: 2023-06-12 13:05:29 浏览: 313
以下是一个简单的Java代码示例,用三个线程模拟电影院三个窗口同时卖票的过程,总票数为100张。在卖票的过程中使用synchronized关键字确保线程同步,避免出现多卖、少卖、重复卖票的情况。
```java
public class CinemaTicketSale implements Runnable {
private int ticketCount = 100;
public synchronized boolean sellTicket() {
if (ticketCount > 0) {
ticketCount--;
System.out.println(Thread.currentThread().getName() + "卖出一张票,剩余票数为" + ticketCount);
return true;
} else {
System.out.println(Thread.currentThread().getName() + "售票结束,余票不足");
return false;
}
}
@Override
public void run() {
while (sellTicket()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
CinemaTicketSale cinemaTicketSale = new CinemaTicketSale();
Thread thread1 = new Thread(cinemaTicketSale, "窗口1");
Thread thread2 = new Thread(cinemaTicketSale, "窗口2");
Thread thread3 = new Thread(cinemaTicketSale, "窗口3");
thread1.start();
thread2.start();
thread3.start();
}
}
```
在这个例子中,我们创建了一个CinemaTicketSale类来管理电影院的票务系统,其中ticketCount表示剩余的票数,sellTicket()方法用来售票,使用synchronized关键字确保线程同步。在run()方法中,每个线程都会不断地调用sellTicket()方法进行售票,直到票卖完为止。在main()方法中,我们创建了三个线程并启动它们,模拟电影院三个窗口同时卖票的过程。
阅读全文