OO第二单元总结

程序分析

第五次作业

第五次作业比较简单,采用了最基础的生产者消费者的模式,由输入提供请求,电梯获取请求并执行,对多线程有了初步的了解。

第六次作业

第六次作业在第五次作业的基础上实现捎带功能,由于我没有完全读懂指导书上对捎带的实现,我对捎带的方法略微做了修改,但总体思路不变,寻找电梯运行方向上的乘客进行捎带。在判断是否捎带的方法和更新请求列表的方法中if else和while较多,导致圈复杂度较高。

第七次作业

第七次作业共三部电梯,与第六次作业采用了相同的捎带方法,Elevator类主要增加了可停靠楼层和最大承载人数的基本属性,其余基本不变。Scheduler类对三个电梯采用相同的分配方法,主要增加了对不能靠一部电梯单独完成的请求的分割。在分割请求时采用了穷举的方法,导致复杂度较高。

三次作业中主要的线程安全在于对请求列表的处理(放入请求,取出请求),采用了wait和notify的组合来解决线程安全问题。

 

程序BUG

第五次作业中未发现bug。

第六次作业在完成后未发现bug,但在实现过程中出现了部分请求未能执行的情况,最终发现是由于判断线程结束的顺序错误导致电梯线程提前结束。

第七次作业在分割请求时将部分的数字1,5,15打错导致部分请求永远无法完成(眼瞎没救了),将数字改成正确的后未发现其他bug。

 

心得体会

三次作业中我并没有遇到太多的线程安全问题,但是多线程的调试比较困难,所幸本次的输出就为我提供了一种发现bug的途径。比起第一单元的作业,第二单元的作业没有出现全部重写的情况,虽然我没有提前实现后续所需要的功能,但每次都能较好的利用前一次作业的架构,为我节省了不少时间。

posted @ 2019-04-24 17:33  薛晨祺  阅读(113)  评论(0编辑  收藏  举报