复制
收藏
提问
全网
设计一个多线程程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况 1、要求打印出每个售票点所卖出的票号 2、各售票点不能售出相同票号的火车票 请给出JAVA代码
5月前
理解问题设计一个多线程程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况 1、要求打印出每个售票点所卖出的票号 2、各售票点不能售出相同票号的火车票 请给出JAVA代码
已完成理解「设计一个多线程程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况 1、要求打印出每个售票点所卖出的票号 2、各售票点不能售出相同票号的火车票 请给出JAVA代码」
展开阅读网页
为了设计一个多线程程序来模拟火车站售票情况,我们需要创建一个共享资源(火车票数量)和多个线程(售票点),并确保线程安全以避免售票点售出相同的票号。以下是一个简单的Java代码示例,实现了上述要求:
package com.hebust.java.third;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
public class TicketSeller implements Runnable {
// 使用AtomicInteger来确保线程安全
private AtomicInteger ticketsRemaining = new AtomicInteger(100);
// 每个售票点的编号
private int sellerId;
public TicketSeller(int sellerId) {
this.sellerId = sellerId;
}
@Override
public void run() {
while (ticketsRemaining.get() > 0) {
// 同步代码块,确保每次只有一个售票点可以卖票
synchronized (this) {
if (ticketsRemaining.get() > 0) {
int ticketNumber = ticketsRemaining.getAndDecrement();
System.out.println("Seller " + sellerId + " sold ticket number " + ticketNumber); // 打印售票信息
}
}
}
}
public static void main(String[] args) {
// 创建5个售票点线程
TicketSeller[] sellers = new TicketSeller[5];
for (int i = 0; i < 5; i++) {
sellers[i] = new TicketSeller(i + 1);
Thread thread = new Thread(sellers[i]);
thread.start();
}
}
}
在这段代码中,我们使用了AtomicInteger
来确保火车票数量的线程安全,避免多个线程同时修改票数。每个售票点通过getAndDecrement
方法安全地获取并递减票数。此外,我们使用了synchronized
关键字来确保在打印售票信息时,一次只有一个售票点可以执行该操作,从而避免了多个售票点打印相同的票号。
更专业一些
转笔记
专业
设计一个多线程程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况
1、要求打印出每个售票点所卖出的票号
2、各售票点不能售出相同票号的火车票
请给出JAVA代码不在提醒