提示:Java多线程完成火车票售卖案例
前言
我们在学习Java多线程时,可能最典型的一个案例就是火车票售卖,那么如何在不重复售票的情况下卖出全部火车票,我们通过Java多线程来完成,并根据 synchronized 同步锁关键字来限制同时卖出一张票的情况
提示:以下是本篇文章正文内容,下面案例可供参考
一、代码实现
/**
* 火车票问题:10个售票窗口,卖出150张票,不能卖出相同的票
* */
public class ThreadTest implements Runnable {
// 车票
private static int ticket = 1;
/**
* 加锁对象
*/
Object lock = new Object();
/**
* 重写 Runnable 的 run 方法,调用卖票的操作方法
* */
@Override
public void run() {
// 限制150张票
while (ticket <= 150) {
shopping();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 卖票的操作方法
* */
private void shopping() {
// 根据lock对象加同步锁(内部会去判断是否有锁)
synchronized (lock) {
if (ticket <= 150) {
System.out.println(Thread.currentThread().getName() + "卖出第" + ticket + "张票!");
// 票号增加
ticket++;
} else {
// 大于150说明票已经卖完了
System.out.println("没票了!");
return;
}
}
}
}
// 内部类调用
class runThread {
// 执行线程
public static void main(String[] args) {
ThreadTest threadTest = new ThreadTest();
for (int i = 1; i <= 10; i++) {
new Thread(threadTest, "售票窗口" + i).start();
}
}
}
二、控制台输出结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4655664455616cb8eb55c1951d75df6b.png)
代码中注释还是比较详细的,如果没讲清楚的话请在下方留言!
总结
通过上述代码,就完成了简单的火车票售卖案例,你是否已经对Java 多线程有初步的认识了呢?没有的话没关系,作者后续会发布更多关于Java相关的开发技术分享与归纳总结,
欢迎一键三连!!!