第二单元总结

一、设计策略

  第五次作业

  类图如下:

  此次作业共设计了五个类,分别是:MainClass,主类;InputData类,有单独的线程,用于处理输入数据,并传递给调度器;Elevator类,电梯线程,根据调度器的指令执行上下楼、开关门等操作;Scheduler类,调度器线程,根据电梯当前的状态和所有等待中的请求,计算电梯下一步应做的操作,并通知电梯;Instruction类,用于电梯和调度器之间传递命令。

  在调度算法上,本人采用的是Look算法,电梯会上下扫描式地运送乘客,能避免在某一区域来回运动,浪费大量时间;另外,由于此次作业没有最大人数限制,为了减少开关门的次数,电梯每次开门都会一股脑的将当前楼层所有乘客搭载上,在编写代码时也更方便,但这也给之后的作业埋下了隐患。

  由于此次作业只有一部电梯,本人在设计时误将进出电梯的操作放在调度器类中,导致之后的作业出现多部电梯时,代码难以拓展,只得重新设计。

  第六、第七次作业:

  由于第五次作业的架构设计不够好,可拓展性差,没有为之后的作业做考虑,面对多部电梯的情况只能重构整个架构,导致第六、第七次作业没能顺利完成。

二、Bug分析

  本人在第五次作业的中强测中没有发现Bug,但是在互测中找出了一个Bug,原因是调度器电梯线程在没有请求(当前请求已处理完毕)时仍在不断运行,导致CPU运行时间超过限制。我也根据自己的Bug设计了针对性的测试样例,在互测屋中找出另一个人相同的Bug。

三、心得体会

  Java多线程的设计和以往的单线程设计思路大不相同,需要充分考虑线程之间的同步,这也是我认为多线程设计最难的地方,本人正是因为多线程的同步没有思考清楚,才导致此单元的作业没有圆满完成。

原文地址:https://www.cnblogs.com/doconicu/p/12728411.html