【面向对象】第二单元总结——电梯
设计策略
本次作业开始引入多线程编程。
第一次作业是实现单部单请求电梯,我采用的策略是通过输入把请求保存在调度器的队列中,调度器会向电梯发出指令以驱使其运行。
第二次作业是实现单部多请求电梯,我采用的策略是输入之后,调度器对输入请求进行处理,然后保存在电梯的不同队列中(向下运行队列、向上运行队列),电梯按照运行队列的顺序运行。从总体上来说,电梯的运行模式是上下行交替。
第三次作业是实现多部多请求电梯,我采用的策略与第二次类似,不同点是调度器会按一定的算法把请求保存在不同电梯的队列里。
对于线程终止的说明是,输入终止会记录标记,电梯队列为空并拥有终止标记时停止运行。
代码度量
第一次作业
第二次作业
BUG
BUG内容
自己出现的BUG内容主要是如何向队列分配请求的算法上,还有就是电梯完成当前队列的判断条件上。
寻找BUG的策略
由于本次作业与第一次作业最大的不同在于多线程的使用,所以在寻找BUG的时候我会更多地测试并发性,请求同时出现如何处理?能否实现捎带?当电梯停止运行,更新下一个目的地的时候出现了新请求该如何处理?诸如此类的问题......
心得体会
设计原则
在本次作业中我运用到了单例模式、工厂模式、生产消费模式等成熟的设计模式,同时也注意遵循单一责任原则、开闭原则等设计原则。使用成熟的模型,并遵循良好的规范可以使我的程序在运行时更加稳定,程序的运行逻辑更符合我对它的期望,不会出现一些奇奇怪怪的BUG,难以定位。就算是出现了BUG,也多半是自己设计上的失误,能够较快更正。
线程安全
要写好本次多线程作业,我觉得务必要把锁与同步的细节弄清楚。notify和wait如何配合使用?锁对象和锁方法究竟有什么区别?弄清楚这些之后,才能确保线程运行的逻辑在我们的控制之下。