多线程写一个售票的代码
时间: 2023-05-25 12:02:36 浏览: 55
以下是一个Java多线程售票的示例代码:
```
public class TicketSeller implements Runnable {
private int ticketsLeft = 100; // 剩余的票数
public void run() {
while (ticketsLeft > 0) {
synchronized(this) { // 加锁,防止并发问题
if (ticketsLeft > 0) {
System.out.println(Thread.currentThread().getName()
+ "卖出一张票,剩余:" + --ticketsLeft + "张");
} else {
System.out.println("票已售完!");
}
}
try {
Thread.sleep(100); // 等待100ms,模拟网络延迟或其他操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
TicketSeller ts = new TicketSeller();
Thread thread1 = new Thread(ts, "售票窗口1");
Thread thread2 = new Thread(ts, "售票窗口2");
Thread thread3 = new Thread(ts, "售票窗口3");
thread1.start();
thread2.start();
thread3.start();
}
}
```
该代码中,定义了一个`TicketSeller`类来售票,其实现了`Runnable`接口,实现了`run()`方法。
在`run()`方法中,使用`synchronized`关键字对拉锁,以保证在并发下不会出现数据安全问题。每当卖出一张票后,就将剩余票数减1,并输出卖票信息。如果售完了所有票,就输出“票已售完!”信息。
在`main()`方法中,创建三个线程,模拟三个售票窗口,启动这些线程,让它们同时卖票。