java runnable 火车票 错
时间: 2023-10-11 21:19:31 浏览: 85
非常抱歉,您提供的信息有些简略,我不太清楚您具体想要实现什么功能。如果您能够提供更多的上下文信息或者代码片段,我会尽力帮您解决问题。
不过,我猜测您可能是想要实现一个多线程的火车票售卖系统。在这个系统中,多个售票员会同时售卖火车票,每个售票员只能售卖一张票。为了保证售票的正确性和一致性,我们需要使用 Java 中的同步机制来保护共享变量的访问,避免多个售票员同时售卖同一张票的情况发生。
以下是一份可能的代码,您可以参考一下:
```
public class TicketSeller implements Runnable {
private static int tickets = 100;
private static Object lock = new Object(); // 同步锁
public void run() {
while (tickets > 0) {
synchronized (lock) {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + " sells ticket " + tickets);
tickets--;
}
}
try {
Thread.sleep(100); // 模拟售票时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Thread[] threads = new Thread[10];
for (int i = 0; i < threads.length; i++) {
threads[i] = new Thread(new TicketSeller());
threads[i].start();
}
}
}
```
在这份代码中,我们创建了一个 `TicketSeller` 类,它实现了 `Runnable` 接口。在这个类中,我们定义了一个静态的共享变量 `tickets`,它表示当前火车票的数量。我们还定义了一个静态的同步锁 `lock`,用来保护对 `tickets` 变量的访问。
在 `run()` 方法中,每个售票员会不断地检查 `tickets` 变量是否大于 0,如果是的话,则使用同步锁来保护对 `tickets` 变量的访问,售卖一张票,并将 `tickets` 变量减 1。在售卖完一张票后,售票员会暂停 100 毫秒,模拟售票时间。
在 `main()` 方法中,我们创建了 10 个线程,并启动它们。每个线程都会执行 `run()` 方法中的代码,售卖火车票。由于使用了同步锁来保护对 `tickets` 变量的访问,所以每个售票员只能售卖一张票,且不会出现重复售卖同一张票的情况。
希望这份代码能够帮到您!
阅读全文