设计一个多线程程序,模拟火车售票窗口售票的功能。创建线程1和线程2,通过这两个线 程共同售出100张java
时间: 2024-06-13 10:03:59 浏览: 145
这个多线程程序可以通过创建一个售票类,然后在该类中实现售票的方法。在售票方法中,使用synchronized关键字来保证线程同步,避免多个线程同时访问同一个票。同时,使用Random类来模拟每次售票需要的时间,并使用SimpleDateFormat类来格式化时间输出。最后,创建多个线程来模拟多个售票窗口,每个线程都调用售票方法来售票。
代码示例:
```
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class TicketSeller implements Runnable {
private static int count = 100; // 总票数
private static final Object lock = new Object(); // 锁对象
private String name; // 窗口名
public TicketSeller(String name) {
this.name = name;
}
@Override
public void run() {
while (true) {
synchronized (lock) {
if (count > 0) {
// 模拟售票需要的时间
try {
Thread.sleep(new Random().nextInt(3000) + 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 售票
count--;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(formatter.format(new Date()) + " " + name + " 售出一张票,剩余票数:" + count);
} else {
System.out.println(name + " 售票结束");
break;
}
}
}
}
}
// 创建多个线程模拟多个售票窗口
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
new Thread(new TicketSeller("售票点" + i)).start();
}
}
}
--相关问题--:
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)