火车票购买问题模拟-同步
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个人准备购买火车票...
...
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个人准备购买火车票...
...
相关文章推荐
- java多线程学习笔记(三) ——多线程实例火车票问题+同步synchronized初接触
- java中的线程同步问题 模拟出售火车票
- Java学习--多线程案例--模拟火车票销售(线程安全问题)
- 东北大学操作系统实验:进程同步和通信(生产者消费者问题模拟)
- 同步与互斥经典案例——模拟火车票售票系统
- 用C#线程技术模拟“生产者-消费者”经典进程同步问题
- C++模拟“生产者消费者”进程同步问题
- 第48周星期二模拟解决同步超时问题
- 多线程问题实例--火车票销售模拟
- 模拟火车票销售系统--线程同步+安全问题(初期 1)
- 火车票购买系统模拟
- 多线程学习2,买火车票,并解决同步安全的问题
- Unix下读者写者同步问题的模拟程序
- Altium Designer 网表导入常见问题 网表导入教程 同步原理图与PCB
- 用多进程同步方法演示“桔子-苹果”问题
- [转]PowerDesigner中Name与Code同步的问题
- 解决了写mp4文件时,声音和视频不同步的问题
- 基于信号量与P/V操作同步机制的读者/写者问题的设计与实现 (写者优先)
- SqlServer2012 数据库的同步问题汇总
- mysql 多台数据库同步server-id 重复导致的问题