- 浏览: 239249 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
thepastsee:
304572183股票交流 欢迎加入
实时股票 -
345161974:
很不错,我第一个接触的CSS卡片布局效果,多谢
css卡片效果
票真难买呀,咋回个家就怎么难呢?
这几天学习了下线程,加上买票的事,就写了个模拟售票窗口买票的问题:有四个窗口对顾客售票,一个顾客只能买一张票.
1.Consumer类
/**
* 顾客
* @author xpery
*
*/
public class Consumer implements Runnable {
private Ticket ticket;
public Consumer(Ticket ticket){
this.ticket= ticket;
}
public void run() {
while(true){
ticket.getConsumer();
if(ticket.ticketNum<=0){
System.out.println("售票窗口已关闭,请明天再来!");
break;
}
}
}
}
2.Windows类
/**
* 窗口
* @author Xpery
*
*/
public class Windows implements Runnable {
private Ticket ticket;
public Windows(Ticket ticket){
this.ticket = ticket;
}
public void run() {
while (true) {
ticket.saleTicket();
if(ticket.ticketNum<=0){
System.out.println("关闭售票窗口"+Thread.currentThread().getName());
break;
}
}
}
}
3.Ticket类
import java.util.Vector;
public class Ticket {
// 总票数
public int ticketNum = 100;
// 是否有顾客
private boolean isConsumer = false;
private Vector<Integer> numVector = new Vector<Integer>();
/**
* 售票
*/
public synchronized void saleTicket() {
// 是否有顾客,没有就等待
if (!isConsumer) {
try {
wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
if (ticketNum > 0) {
System.out.println(Thread.currentThread().getName() + "卖给"
+ getConsumerName() + "一张票,票号为:" + ticketNum-- + "票");
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
isConsumer = false;
notify();
}
/**
* 获取顾客
*/
public synchronized void getConsumer() {
// 是否有顾客,有就等待
if (isConsumer) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 判断票是否已经售完
if(ticketNum==0){
System.out.println("对不起,今天的票已售完,请明天早点来!");
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
isConsumer = true;
notify();
}
/**
* 获取顾客名称
* @return
*/
public String getConsumerName() {
int num = Integer.valueOf((int)(Math.random() * 999 + 1));
String consumerName="顾客" + num;
// 判断是否有人重复买票
while (numVector.contains(num)) {
System.out.println("对不起,"+consumerName+" ,您已经买了一张票,不能再买一张了");
num = Integer.valueOf((int)(Math.random() * 999 + 1));
}
numVector.add(num);
return consumerName;
}
}
4.主程序:MianTest
public class MianTest {
public static void main(String[] args) {
Ticket ticket = new Ticket();
/**
* 产生一个顾客对象,用来获取顾客
*/
Consumer consumer = new Consumer(ticket);
Thread threadConsumer = new Thread(consumer);
threadConsumer.start();
/**
* 产生四个窗口
*/
Windows windows = new Windows(ticket);
for (int i = 1; i < 5; i++) {
Thread threadWindows = new Thread(windows);
threadWindows.setName(i + "号窗口");
threadWindows.start();
}
}
}
发表评论
-
jdbc_连接池_转
2012-02-19 22:49 0http://z466459262.iteye.com/bl ... -
java_贪吃蛇——
2012-01-17 11:14 848ADADS -
java并发重构ppt_转温 少
2011-06-23 16:04 687ooooo -
GBK_UTF-8_转
2011-06-21 11:15 1549转 http://www.iteye.com/topi ... -
单例模式七种写法_转
2011-05-26 23:19 789kjljkl -
设计模式_code_转转转
2011-05-25 17:14 690kljlj -
java_字符串操作——插入、替换、删除_转
2011-03-18 18:38 1247字符串操作——插入、替换、删除 ... -
mysq 存储过程技术手册
2011-02-17 22:49 454jklkj -
mysql专家_分析pdf
2011-02-17 20:43 850dfasdfasdf -
成均科技_面试
2011-02-16 17:38 848成均科技: XmlHttpRequest 浏览器对 ... -
java 学习方向
2011-01-26 16:56 663http://newleague.iteye.com/ ... -
web 项目_ log4j__转转java3Z
2011-01-18 22:16 1014在web应用中使用日志工具log4J ... -
汉字排序_java_转转
2011-01-15 17:09 893java中漢字按拼音排序 ... -
ecilpse_apanta_
2011-01-15 00:11 1044<!-- [if gte mso 9]><x ... -
linux_virutalBox_固定ip_转转
2011-01-12 21:35 951Windows XP通过Sun VirtualBox ... -
存储过程_转转转 _ibatis
2011-01-04 21:14 1301作者:袁光东 我们在进行pl/sql编程时打交道最多的 ... -
J2EE项目异常处理_转
2011-01-04 21:08 697J2EE 项目异常处理 ... -
防盗链_图片
2010-12-30 08:57 878做个图片的防盗链 ... -
java 缩略图__转
2010-12-24 00:29 735//----------------------------- ... -
url_中文_竹林仙_转转转
2010-12-22 18:23 684//----------------------------- ...
相关推荐
Java Thread多线程全面解析涵盖了Java编程中关于线程的重要概念和实践技巧。在Java中,多线程是并发编程的基础,允许程序同时执行多个任务,提高系统资源利用率和应用程序的响应速度。 线程的生命周期包括五个基本...
6. **多线程处理**:在高并发的售票场景下,多线程处理是提高系统性能的重要手段。学习线程的创建、同步和互斥锁等概念,可以保证系统在处理购票请求时的稳定性和效率。 7. **Web服务或API调用**:如果系统需要与...
12. **并发与多线程**:如果售票系统需要支持多用户同时操作,那么必须处理并发和线程同步问题,以防止数据冲突。 13. **安全性**:考虑到涉及金钱交易,系统应有相应的安全措施,如防止SQL注入、数据加密等。 ...
6. **多线程**:如果系统支持并发购票,那么多线程编程就显得尤为重要。Java的Thread类和Runnable接口可以实现多线程,保证系统的高效运行。 7. **设计模式**:在编写大型程序时,设计模式提供了一种标准的解决方案...
7. **多线程**:如果系统需要处理并发的售票请求,可能需要用到多线程技术,确保同时处理多个销售任务,提高系统性能。 8. **状态管理**:在售票系统中,可能会有“待支付”、“已支付”等订单状态,需要设计合理的...
9. **TicketsSystem.java**:这个文件很可能是一个模拟售票系统的例子,通常会展示如何在多线程环境下正确处理共享资源,如票的数量。它可能涉及到线程同步机制,如synchronized或Lock,以确保在并发环境下售票的...
3. **多线程**:并发处理购票请求,提高系统响应速度。使用Thread或Runnable接口实现并发。 4. **网络通信**:如果系统涉及服务器与客户端之间的通信,可能需要使用Socket编程,实现数据的发送和接收。 5. **IO与...
并发数据结构是为多线程环境设计的数据结构,它们在多个线程访问时能够保持一致性,避免出现数据不一致的情况。可线性化是并发数据结构的一种关键特性,它保证了在不同的并发执行历史中,数据结构的状态转换看起来像...
为了实现这些功能,开发者可能使用了Java的多线程来处理并发请求,确保系统在高负载下的稳定运行。同时,为了保证数据的一致性,可能还应用了事务管理,比如ACID(原子性、一致性、隔离性和持久性)原则。 此外,...
6. **并行与分布式系统**:介绍并发编程的挑战、线程和进程间的协作,以及分布式系统的原理和通信机制。 7. **调度算法**:学习不同的进程调度策略,如FCFS(先来先服务)、SJF(最短作业优先)、优先级调度和多级...
再者,多线程并行处理是大型系统性能提升的关键。Java提供了丰富的并发工具类,如ExecutorService、Semaphore、CyclicBarrier等,用于高效地管理线程池和控制并发。在铁路售票系统中,合理使用这些工具可以有效地...
#### 三、多线程编程 **题目15**: 有500张火车票编号从001到500,5个窗口同时售票,请写出一个类,实现5个窗口可同时售票。 **解析**: 这个问题可以通过使用`Thread`类和`synchronized`关键字来实现线程间的同步,...
【描述】"发卡源码java"可能是指这个项目包含了一些与处理并发任务相关的代码,如模拟售票或发卡等场景,这些场景通常需要多线程来提高效率。通过这个项目,开发者可以学习到如何在Java平台上实现并发编程。 【标签...
实验可能涉及使用特定的编程语言(如C或Python)编写并发程序,模拟多线程或多进程环境,以体验同步与互斥的概念,比如信号量机制和死锁的预防与检测。 接着,我们会探索内存管理。在这一部分,你将了解到虚拟内存...
5. Windows NT是微内核结构的操作系统,进程不再是执行的单位,而是资源分配的单位,线程完成执行功能。 解答题: 1. 操作系统是管理和控制计算机硬件与软件资源的系统软件,它为用户和其他软件提供服务,如资源...
本资源是一个针对安卓Android平台的汽车票售票订票应用的毕业设计案例,包含了完整的源...通过研究源代码,可以提升对Android开发技术的理解,包括UI设计、网络通信、数据库操作、多线程处理以及第三方服务的集成等。
5. **多线程**:在高并发环境下,如多个用户同时购票,多线程技术可以确保系统的稳定性和性能,避免数据冲突。 6. **缓存管理**:为了提高性能,可能使用缓存技术(如Redis或Memory Cache)来存储热门或频繁访问的...
处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四) 流协议与粘包 粘包产生的原因 粘包处理方案 readn writen 回射客户/服务器 10socket编程(五) read、write与recv、send readline...
进程同步是操作系统中一个至关重要的概念,特别是在多处理器和多线程环境中,多个进程或线程可能同时访问共享资源,这就需要有效地管理它们的执行顺序,以防止数据不一致和死锁的发生。在这个"进程同步模拟程序"中,...