首页 > 其他 > 详细

OO第二单元总结

时间:2021-04-26 10:50:17      阅读:24      评论:0      收藏:0      [点我收藏+]

1 同步块设置和锁的选择

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

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

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

2 调度器设计与线程交互

controller:调度器线程

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

线程运行:循环

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

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

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

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

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

elevator:电梯线程

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

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

电梯状态:

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

运动:

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

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

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

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

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

UML图

技术分享图片

bug策略

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

2 输入边界数据

心得体会

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

OO第二单元总结

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!