Object Oriented Homework Summary(2)
OO第二单元总结(电梯问题)
论滑铁卢的诞生
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
一、程序结构分析
第一次作业(单电梯无捎带)
本次作业需要完成对单个电梯从1-15层的运行模拟。无性能分。
(1)UML:
一目了然 不言而喻
(2)功能概述
这次作业用得上多线程?
这次作业设置了五个类:Main,TaskHandler,Elevator,GetTask以及SendTask.其中Main是主线程,TaskHandler阻塞式读取输入的数据,把输入的PersonRequest类转化成GetTask对象和SendTask对象并传入到Elevator对象的任务队列中。而Elevator对象则暴力轮询任务队列TaskBuffer来判断是否能够搭载相应任务的乘客。
我如此设计的主要目的在于为hitchhiking功能的实现提供基础。毕竟如果电梯要想搭载能够hitchhike的乘客肯定需要对当前全部的任务有访问的能力。尽管从后面的作业(多电梯)来看,将全部任务放入一个电梯是糟糕的设计,但这个设计思路仍然能够一定程度保证效率,并且在线程安全角度也是较优的选择(分开阻塞两个Buffer的读写线程)。
主要的缺点在于暴力轮询。尽管我周围的有些人甚至将暴力轮询带到了第三次作业中(而且还pass了所有强侧点ORZ),但暴力轮询从性能和cpu资源利用的角度分析是糟糕的设计。更合理的架构是wait和notify建立的锁机制。

更多精彩