用Java实现实验二 使用继承Thread的方式实现三个窗口卖一百张票 程序运行结果。 单线程与多线程对比:输出单线程和多线程的运行时间对比。
时间: 2024-10-21 17:13:50 浏览: 33
在Java中,你可以通过创建一个`TicketWindow`类作为基础类,并继承自`Thread`类来实现在三个窗口分别出售100张票的功能。每个窗口代表一个独立的线程,它们各自处理销售任务。下面是一个简单的示例:
```java
class TicketWindow extends Thread {
private int tickets;
public TicketWindow(int tickets) {
this.tickets = tickets;
}
@Override
public void run() {
while (tickets > 0) {
System.out.printf("窗口 %d 卖出一张票,剩余 %d 张\n", Thread.currentThread().getId(), tickets - 1);
tickets--;
}
System.out.println("窗口 " + Thread.currentThread().getId() + " 所有票售罄");
}
}
public class Main {
public static void main(String[] args) {
TicketWindow window1 = new TicketWindow(100);
TicketWindow window2 = new TicketWindow(100);
TicketWindow window3 = new TicketWindow(100);
// 启动线程
new Thread(window1).start();
new Thread(window2).start();
new Thread(window3).start();
// 输出所有窗口完成情况
try {
window1.join();
window2.join();
window3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
在这个程序中,单线程模式下,由于只有一个窗口(主线程)进行售票,所以其他窗口需要等待主线程卖出票后才能继续。而在多线程模式下,三个窗口并行运行,理论上能提高整体效率。
为了比较单线程和多线程的运行时间,你需要在实际环境中运行这个程序,并记录开始到所有窗口票售罄的时间。然后可以再次运行多线程版本,对比两个场景下的运行时间。通常,多线程会因为减少了锁的竞争,使得总时间减少。但是注意,这涉及到系统资源分配、调度等因素,实际效果可能会因环境而异。
阅读全文