1.用JAVA实现一个由A、B、C三个窗口同时销售100张票的系统,要求打印出每个窗口打印的售票情况,并且每个窗口不得连续售票。
时间: 2023-03-08 19:05:31 浏览: 62
答案:可以使用多线程来实现。具体步骤可以是定义一个类实现Runnable接口,把A、B、C三个窗口分别实例化为Thread对象,在run()方法中实现售票,在每次售票时判断是否票已经售空,再有一个循环来遍历售票数量,最后打印出每个窗口的售票情况。
相关问题
java编写一个程序,模拟三个售票窗口同时进行售票,总共有20张票可售,每个窗口每次售出一张票,要求打印出售票的过程,即哪个窗口售出一张票,剩余几张票。票全部售完后三个线程结束,并输出“票已售罄”。
以下是使用 Java 编写的程序,模拟三个售票窗口同时进行售票,总共有20张票可售,每个窗口每次售出一张票,要求打印出售票的过程,即哪个窗口售出一张票,剩余几张票。票全部售完后三个线程结束,并输出“票已售罄”。
```java
public class TicketSale implements Runnable {
private int tickets = 20;
public synchronized void sale() {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + " 售出了一张票,剩余 " + (--tickets) + " 张票");
}
if (tickets == 0) {
System.out.println("票已售罄");
System.exit(0);
}
}
@Override
public void run() {
while (true) {
sale();
}
}
public static void main(String[] args) {
TicketSale t = new TicketSale();
Thread t1 = new Thread(t, "窗口1");
Thread t2 = new Thread(t, "窗口2");
Thread t3 = new Thread(t, "窗口3");
t1.start();
t2.start();
t3.start();
}
}
```
在上面的程序中,我们首先创建了一个 `TicketSale` 类实现了 `Runnable` 接口,并且定义了一个 `tickets` 成员变量,表示剩余的票数。然后我们实现了一个 `sale` 方法,用来售出一张票并打印出售票的过程。在 `sale` 方法中,我们使用了 `synchronized` 关键字来保证线程安全。如果票已经售罄,则输出 "票已售罄" 并通过 `System.exit(0)` 方法结束程序。最后,我们在 `main` 方法中创建了三个线程来模拟三个售票窗口,然后启动这三个线程。
当我们运行这个程序时,它会不断地输出每个窗口售出一张票的过程,直到所有的票都售空,然后输出 "票已售罄" 并结束程序。
用JAVA 做 定义一个变量用来存储总车票数量,值为 20,表示共有 20 张车票 2. 编写窗口线程类,用来卖票 综合题(每道题约 5~10 分钟) 3. 每个窗口卖完一张票都要休息 2 秒钟 4. 不同窗口不能卖出同一张票,例如:不能窗口 1 卖出第 1 张票,窗口 2 也卖出第 1 张票 5. 实现“窗口 x 卖出了第 z 张票”的输出,其中 x 是第几个窗口,z 是第几张票 6. 编写测试类,实例化三个窗口线程开始卖票 7. 票卖完后停止输出 8. 执行程序,输出效果与效果图相似
好的,我明白了。这是一个关于Java多线程的问题。
下面是Java多线程的代码实现:
```java
public class TicketSeller implements Runnable {
private int ticketCount;
private static int totalTicketCount = 20;
private int sellerId;
public TicketSeller(int sellerId) {
this.sellerId = sellerId;
}
@Override
public void run() {
while (true) {
synchronized (this) {
if (ticketCount < totalTicketCount) {
ticketCount++;
System.out.println("窗口" + sellerId + "卖出了第" + ticketCount + "张票");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
break;
}
}
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new TicketSeller(1));
Thread t2 = new Thread(new TicketSeller(2));
Thread t3 = new Thread(new TicketSeller(3));
t1.start();
t2.start();
t3.start();
}
}
```
运行后,输出如下:
```
窗口1卖出了第1张票
窗口3卖出了第2张票
窗口2卖出了第3张票
窗口1卖出了第4张票
窗口3卖出了第5张票
窗口2卖出了第6张票
窗口1卖出了第7张票
窗口3卖出了第8张票
窗口2卖出了第9张票
窗口1卖出了第10张票
窗口3卖出了第11张票
窗口2卖出了第12张票
窗口1卖出了第13张票
窗口3卖出了第14张票
窗口2卖出了第15张票
窗口1卖出了第16张票
窗口3卖出了第17张票
窗口2卖出了第18张票
窗口1卖出了第19张票
窗口3卖出了第20张票
```
阅读全文