BUAA_OO第二单元总结

 BUAA_OO第二单元总结

本单元我只完成了第三次作业。下面只讲第三次作业的内容。

锁与同步块

唯一的共享对象是RequestQueue。主线程将读取到的乘客请求送入RequestQueue中,RequestQueue按照一定规则将其加入到不同类型电梯的待接收请求队列中。每台电梯配有一个控制器。每次电梯向控制器询问下一步操作时,控制器就会访问RequestQueue的对应队列,并将其中请求全部取出,置于控制器内的待处理请求队列中。上述操作中只有主线程对RequestQueue的写入和电梯线程中的控制器对RequestQueue的读取操作需要使用同步块。

调度器设计

简单调度。不设换乘。

电梯种类 条件
C类电梯 乘客从1-3层到18-20层或从18-20层到1-3层
B类电梯 从奇数楼层到奇数楼层
A类电梯 else

架构设计

UML类图与UML协作图

 

BUAA_OO第二单元总结

 

架构设计

BUAA_OO第二单元总结

 

 

电梯分为6个状态。

0:请求态。电梯向控制器询问下一步操作。若当前控制器还未受到请求则会等待。根据控制器传回的操作码,电梯进行不同的操作。

1:上行。休眠一定时间后电梯所在楼层加一,进入请求态。

2:下行。类似。

3:等待。只有在morning模式下才有意义。等待2s,然后根据控制器的等待信号决定是否继续等待。

4:开门。休眠0.2s后电梯开门,除去电梯中所有目标楼层为当前层的乘客。若当前层有乘客要乘梯,则使其全部进入。

5:关门。休眠0.2s后电梯关门。进入请求态。

 

控制器根据当前电梯的楼层、乘客人数、到达模式决定电梯的下一步操作。

若有人到达了目标楼层,或电梯未满时当前层有乘客需要乘梯,且其行动方向与主请求一致,则使电梯开门。

若主请求不在电梯中,则电梯开往主请求所在楼层。

若主请求在电梯中,则电梯开往主请求目标楼层。

 

BUG分析

找到了一个bug。在设定主请求的时候,由于没有理清所有可能的情况,发生了空指针的问题。

HACK策略

未曾hack。

心得体会

现在回看这个单元,其实并不难。只要理解了java多线程的机制,和各个线程控制方法的效果及用法就可以轻松完成。但可惜的是上课时讲得浮光掠影,课下我又没有及时查找相关资料,致使我未能顺利完成前两次作业。随着这几个星期不断地加深对多线程的理解,以及两次实验课的上手操作,我才突然发现我错在了哪。之后就顺水推舟完成了第次作业。面对新问题时不要急于下手,要先深刻理解问题的场景和各个部分的行为逻辑才能精准下药。

上一篇:BUAA-OO第二单元总结


下一篇:[BUAA-OS]第二单元(电梯)博客总结