OO第二单元总结

1 同步块设置和锁的选择

线程:controller调度器线程、elevator电梯线程、input输入线程

输入线程识别到新请求时,用synchronized锁住调度器线程,更新总等待队列或增加电梯。

当电梯线程需要改变电梯位置或者上下乘客时,用synchronized锁住调度器线程,更新电梯内外乘客队列。

2 调度器设计与线程交互

controller:调度器线程

定义等待请求阻塞队列:从输入中分析的乘客请求

线程运行:循环

乘客等待请求队列非空:分配乘客到合适的电梯

乘客等待请求队列为空:轮询,每0.1秒

线程终止:输入线程终止且没有待分配乘客且没有电梯还有乘客请求

捎带:遍历待分配乘客,遍历电梯,如果该电梯前进方向能经过乘客起始楼层,就让该乘客在该电梯等待队列中等待。并且将捎带标记改为true。

未捎带:如果没有捎带成功,让乘客在特定电梯队列中等待

elevator:电梯线程

定义辅助阻塞队列:电梯内的下电梯请求、电梯外的上电梯请求

定义辅助标记数组:电梯内请求需要停下的楼层、电梯外请求需要停下的楼层

电梯状态:

静止或回到初始位置:内外无请求

运动:

开门、上下客、关门 --- 电梯位置在标记处时

上升 --- 电梯位置在最低标记处之下时

下降 --- 电梯位置在最高标记处之上时

线程运行:轮询,每0.1秒更新标记数组,更新电梯状态

线程终止:调度器线程终止且无内外乘客请求时,电梯线程终止

UML图

bug策略

1 观察代码看是否存在线程安全和死锁的可能性

2 输入边界数据

心得体会

第一次接触多线程,刚开始时有些手足无措无从下手。
第一次作业注意后续的可扩展性,为后续作业提供了方便。

原文地址:https://www.cnblogs.com/sweetchocosvzwrld/p/14702887.html