OO第二单元总结

OO第二单元总结

第一次作业

类图:


​ 第一次作业结构相对简单,由于是单部电梯,未使用调度器。在同步块的设置方面,我使用的是synchronized语句,构造了线程安全类waitQueue,每当有新请求进入时执行notifyall(),电梯在程序未结束且请求队列为空时wait()

第二次作业

类图:

​ 由于是多部电梯,构造了调度器类,本以为Scheduler能够分担一部分Elevator的内容,降低Elevator的复杂度,然而结果显示Elevator反而比上一次更加复杂...或许增加一个电梯策略类能使架构更加合理些

​ 关于同步块和锁的使用,本人依然沿用上次使用synchronized的方法,不同的是Elevator在调用waitqueue的getPersonRequest时从等待Inputer传入请求到等待Schduler分发请求。

第三次作业

​ 本次作业类依赖关系于第二次基本一致。第三次作业中由于加入电梯运行的限制和电梯之间的竞争,预期schedule类的复杂度直线增加,然而,为了实现正确的电梯运营顺序和正常竞争(比如不让其他乘客的便利牺牲某乘客的时间),并未在schedule类做过多改动。

自己程序的bug

​ 本次作业中最头疼的一个问题就是线程的死锁,在电梯运行请求时何时调用getPersonRequest以及getPersonRequest何时等待新请求的输入在三次作业中都一直是个问题。请求输入时机和结束输入发生的时机如果考虑不周也常常引起问题。

发现别人程序bug所采用的策略

​ 由于本单元的作业是多线程任务,没有比较实用的自动化测试手段,依旧使用上一单元的手动构造测试样例。

心得体会

​ 在本单元深入地学习了多线程编程的原理和具体构造,关于线程安全和线程的同步控制也有了进一步的体会,尤其关于是为了达到线程安全自己的大量尝试手段,提高了多线程编程能力。希望今后继续努力,取得好的成绩。

posted @ 2021-04-27 18:11  DaiWei06  阅读(54)  评论(0)    收藏  举报