java多线程资源共享的车站卖票两个窗口
时间: 2024-05-30 16:07:15 浏览: 120
java多线程_java多线程下变量共享_
5星 · 资源好评率100%
在Java多线程中,资源共享是一个常见的问题,比如在一个车站中,有两个售票窗口,多个乘客需要购票。这时候就需要解决多个线程共享同一资源的问题。下面是一个车站卖票的示例程序:
```java
public class Ticket implements Runnable {
private int tickets = 100;
public void run() {
while (true) {
synchronized (this) { // 使用synchronized锁住资源
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "售出第" + tickets-- + "张票");
} else {
break;
}
}
}
}
public static void main(String[] args) {
Ticket ticket = new Ticket();
Thread t1 = new Thread(ticket, "窗口1");
Thread t2 = new Thread(ticket, "窗口2");
t1.start();
t2.start();
}
}
```
在这个示例中,Ticket实现了Runnable接口,并重写了run方法。tickets变量代表了车站还剩余的票数。在run方法中,使用synchronized锁住了this对象,这样同一时刻只有一个线程可以进入临界区,保证了线程安全。如果tickets大于0,则售出一张票;否则退出循环。
在main方法中,创建了两个线程t1和t2,它们共享了Ticket对象。当t1和t2同时访问tickets变量时,会被synchronized关键字锁住,只有一个线程可以执行临界区代码。这样就保证了票数的正确性,避免了多个线程同时访问同一资源导致数据不一致的情况。
阅读全文