您的位置:首页 > 其它

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

2013-08-29 15:48 197 查看
一   购买火车票线程

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个人准备购买火车票...

...

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程