Java编写程序假设有 100张火车票,创建 10 个线程模拟 0个售票点,每个售票点100 毫秒卖一张票。打印出售票过程,注意使用synchronized 确保同一张票只能卖出一次。
时间: 2023-06-05 10:05:52 浏览: 135
好的,这是一个关于Java编程的问题。让我来回答。为了保证同一张火车票只能售出一次,我们可以使用synchronized来实现线程的同步,确保同一时间只有一个线程可以访问共享资源(即火车票)。在程序中,我们可以创建一个Ticket类,用来表示每张火车票,还可以创建一个TicketSeller类,用来表示售票点。在TicketSeller类中,我们可以创建一个synchronized方法来模拟售票过程,每次执行该方法时,首先判断火车票是否已经售完,如果没有,则将该张火车票售出,并打印出售票信息。在程序中,我们可以创建10个TicketSeller线程,模拟10个售票点,每个线程每100毫秒售出一张票,最终打印出售票的过程。
相关问题
设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒售出一张票。Java代码实现
以下是Java代码实现:
```
public class TicketThread implements Runnable {
private static int ticketCount = 1000; // 票总数
private static Object lock = new Object(); // 锁
public void run() {
while (ticketCount > 0) {
synchronized(lock) {
if (ticketCount > 0) {
ticketCount--;
System.out.println(Thread.currentThread().getName() + "售出了一张票,剩余" + ticketCount + "张票");
}
}
try {
Thread.sleep(100); // 模拟售票时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
new Thread(new TicketThread(), "售票点" + i).start();
}
}
}
```
该代码创建了一个实现了Runnable接口的TicketThread类,该类模拟了售票的过程。在main方法中,创建了10个售票点的线程并启动,线程每次售票需要获取lock锁,保证每次只能售出一张票。注:该代码未做线程安全处理,真正的生产环境中需要考虑多线程并发导致的线程安全问题。
假设有火车票100张,创建10个线程模拟10个售票点,每个售票点100毫秒卖一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。用java编写程序
好的,以下是代码实现:
```java
public class TicketSale implements Runnable {
private static int tickets = 100; // 总票数
private static int count = 0; // 已售票数
private static Object lock = new Object(); // 锁对象
private int id; // 售票点编号
public TicketSale(int id) {
this.id = id;
}
@Override
public void run() {
while (count < tickets) {
synchronized (lock) { // 加锁
if (count < tickets) {
count++; // 已售票数加1
System.out.println("售票点" + id + "售出第" + count + "张票");
}
}
try {
Thread.sleep(100); // 模拟售票过程
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// 创建10个售票点
for (int i = 1; i <= 10; i++) {
new Thread(new TicketSale(i)).start();
}
}
}
```
每个售票点都是一个线程,使用synchronized确保同一时刻只有一个售票点能够卖出一张票。在售票过程中,模拟了100毫秒的耗时。程序输出售票过程,直到所有票都售出为止。