Java多线程例子8个窗口同时卖5张票(12306抢票机制)

这篇博客通过Java代码展示了多线程环境下8个售票窗口同时销售5张票的场景,模拟了12306抢票的紧张情况。在代码示例中,探讨了如何处理线程同步问题,以确保票的数量正确分配。
摘要由CSDN通过智能技术生成

国际惯例,先上代码:

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();
				}
			}
			Sys
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值