一、设计策略总结与分析
1、第一次作业:
第一次作业主要理解多线程机制,设计思路并不复杂。有两个线程类:Pas(发出请求)、Ele(电梯类),Main和一个保存请求的队列Ar。Pas调用ElevatorInput把新请求加入请求队列,当请求队列非空时,Ele取出一条指令执行,直到不再有新请求。
2、第三次作业:第三次作业主要解决换乘问题和调度策略。对于不能直达的请求,由Pas()分割成两个请求,由链表链接,在第一段请求完成后,检查是否有后续链接请求。调度策略上采用了比较简单的方式:由于三部电梯都可以到达一楼,所以对于不能直达的请求,均先运送到一楼,再从一楼运到目的地。多部电梯空闲时优先选择速度较快的电梯,当电梯内有乘客时,可以沿途捎带方向一致的乘客。
二、基于度量对程序结构的分析
第一次作业类图:
第三次作业类图:
分析:第三次作业其实存在更有效的调度换乘策略,比如将15楼也设为换乘楼层,但由于简单的策略顺利通过了测试,没有进一步优化。
三、bug分析
第一次作业没有发现bug
第三次作业在测试出现了提前终止的bug(只有一条指令的测试点) ,原因是请求被一部电梯接收后队列为空,另外两部电梯终止运行,没有进行后续换乘。在修正之后,顺利通过了测试。
四、心得体会
1.在第三次作业中出现了线程提前终止的问题,通过判定队列与电梯内是否均无待执行请求解决,适时终止线程
2.应用synchronized等方法,加深了对多线程运行方式的理解。
3.三部电梯写公共的电梯类,加深了对面向对象思想的理解。
4.使用链表的方式解决换乘,练习了对数据结构的使用。