火车票购买问题模拟-同步

一   购买火车票线程

package com.cyb.syn;

import java.util.List;

public class DespoitThread implements Runnable {
 public List<String> listHcp;// 火车票资源

 public DespoitThread(List<String> listHcp) {
  this.listHcp = listHcp;
 }

 public void run() {
  while (true) {
   synchronized (listHcp) {
    if (listHcp.size() == 0) {
     try {
      listHcp.wait();// 没有火车票则等待
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
    listHcp.remove(0);
    listHcp.notify();
    System.out.println("成功购买一张火车票,剩余票数:" + listHcp.size());

   break;//购买完成后,直接退出,让其他购买线程执行。

   }
  }
 }
}

二  多人发起购买事件

public class MultiThread {

 private List<String> container = new ArrayList<String>();

 public final static int MAX = 3;

 public static void main(String args[]) {

  MultiThread m = new MultiThread();
  m.container.add("p1");
  m.container.add("p2");
  m.container.add("p3");
  m.container.add("p4");
  m.container.add("p5");
  m.container.add("p6");
  m.container.add("p7");
  m.container.add("p8");//一共八张火车票,现在开启100个线程,100个人购买。
  for(int i =1 ;i<=100;i++){
   System.out.println("第"+i+"个人准备购买火车票...");
   new Thread(new DespoitThread(m.container)).start();
   
   }
  }

}

三  运行结果

第1个人准备购买火车票...
第2个人准备购买火车票...
成功购买一张火车票,剩余票数:7
成功购买一张火车票,剩余票数:6
第3个人准备购买火车票...
成功购买一张火车票,剩余票数:5
成功购买一张火车票,剩余票数:4
成功购买一张火车票,剩余票数:3
第4个人准备购买火车票...
成功购买一张火车票,剩余票数:2
成功购买一张火车票,剩余票数:1
成功购买一张火车票,剩余票数:0
第5个人准备购买火车票...
第6个人准备购买火车票...
第7个人准备购买火车票...

...

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值