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