1利用Java多线程程序设计方法。 用两个线程模拟存票、售票过程。 假定开始售票处并没有票,一个线程往里存票,另外一个线程则往外卖票 新建一个票类对象,让存票和售票线程都访问它。本例采用两个线程共享同一个数据对象来实现对同一份数据的操作。
时间: 2024-02-13 13:07:11 浏览: 226
好的,我会尽力回答您的问题。
以下是Java多线程程序设计的示例代码,用两个线程模拟存票、售票过程:
```java
public class Ticket {
private int count = 0; // 剩余票数
// 存票方法
public synchronized void addTicket() {
count++;
System.out.println(Thread.currentThread().getName() + " 存了一张票,当前票数为:" + count);
notify(); // 唤醒在等待售票的线程
}
// 售票方法
public synchronized void sellTicket() {
while (count <= 0) { // 当剩余票数为0时,等待
try {
System.out.println(Thread.currentThread().getName() + " 发现没有票,等待中...");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count--;
System.out.println(Thread.currentThread().getName() + " 售出一张票,当前票数为:" + count);
}
}
```
然后,我们可以创建两个线程,一个用来存票,一个用来售票,它们共享同一个Ticket类对象:
```java
public class Main {
public static void main(String[] args) {
Ticket ticket = new Ticket();
// 存票线程
new Thread(() -> {
while (true) {
ticket.addTicket();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "存票线程").start();
// 售票线程
new Thread(() -> {
while (true) {
ticket.sellTicket();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "售票线程").start();
}
}
```
当我们运行这个程序时,存票线程会不断地往Ticket类对象中存票,售票线程会不断地从Ticket类对象中售票,它们会共享同一个剩余票数的变量count。当剩余票数为0时,售票线程会等待存票线程存入新的票,直到有票可售时,它才会售出一张票。
希望这个示例能够帮助您理解Java多线程程序设计方法。
阅读全文