练习: 抢火车票; 成都 -> 宜宾 有1000张票,有4个窗口同时卖票 , 同步方法 ,同步代码块,线程的常用方法, 继承Thread类,实现Runnable接口,使用多线程相关知识写出代码,不要写太复杂,并且每一行带有注释
时间: 2024-02-10 11:57:48 浏览: 61
// 定义一个火车票类
class TrainTicket {
// 票数
private int ticketNum = 1000;
// 同步方法,保证线程安全
public synchronized boolean sellTicket() {
// 如果还有票,售票员卖出一张票
if (ticketNum > 0) {
ticketNum--;
System.out.println(Thread.currentThread().getName() + "售出一张票,剩余:" + ticketNum + "张");
return true;
}
// 如果没有票了,返回false
else {
return false;
}
}
}
// 定义售票员类
class Seller extends Thread {
// 声明火车票对象
private TrainTicket trainTicket;
// 构造方法,传入火车票对象
public Seller(TrainTicket trainTicket) {
this.trainTicket = trainTicket;
}
// 重写run方法
@Override
public void run() {
// 循环卖票,直到所有票都卖完
while (trainTicket.sellTicket()) {
// 模拟售票员卖票的过程
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
// 定义主类
public class TrainTicketDemo {
public static void main(String[] args) {
// 创建火车票对象
TrainTicket trainTicket = new TrainTicket();
// 创建4个售票员对象
Seller s1 = new Seller(trainTicket);
Seller s2 = new Seller(trainTicket);
Seller s3 = new Seller(trainTicket);
Seller s4 = new Seller(trainTicket);
// 启动线程,开始售票
s1.start();
s2.start();
s3.start();
s4.start();
}
}
阅读全文