Java多线程例子8个窗口同时卖5张票(12306抢票机制)
国际惯例,先上代码:
package com.itqs; import java.util.ArrayList; import java.util.List; public class ThreadStation { //定义售票线程类(也就是窗口) public static class Station extends Thread{ //构造方法给线程名字赋值 public Station(String name) { super(name); } //票数要静态定义 static int tick=5; //静态钥匙 static Object ob ="key"; //值是任意的 //重写run方法,实现售票操作 @Override public void run() { List<Integer> list = new ArrayList<>(); while (tick>0) { synchronized(ob) { //必须使用一个同步锁,进去的人会把钥匙拿在手上,出来后才能交出钥匙 if (tick>0) { System.out.printf("%s卖出了第%d张票 \n",getName(),tick); list.add(tick); tick--; }else { System.out.printf("%s:票已售空 \n",getName()); } } try { sleep((int)(Math.random()*3000)+1); //随机休息1-3000ms }catch (InterruptedException e) { e.printStackTrace(); } } System.out.printf("%s 销售情况: %s \n",getName(),list.toString()); } } public static void main(String[] args) { //实例化站台对象,并为每一个站台取名字(8个线程窗口一起卖5张票) for (int i=1; i<=8; i++) { String sName="窗口" + String.valueOf(i); Station Station = new Station(sName); Station.start(); } } }
1,3个窗口同时卖20张票效果:
2,8个窗口同时卖5张票情况(跟国庆一样,票有点儿紧张啊。哈哈。要抢)
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751780.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?