zoukankan      html  css  js  c++  java
  • OO第二单元总结

    1 同步块设置和锁的选择

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

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

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

    2 调度器设计与线程交互

    controller:调度器线程

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

    线程运行:循环

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

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

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

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

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

    elevator:电梯线程

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

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

    电梯状态:

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

    运动:

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

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

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

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

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

    UML图

    bug策略

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

    2 输入边界数据

    心得体会

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

  • 相关阅读:
    互联网 DBA 需要做那些事(转)
    mysql_connect和mysql_pconnect区别(转)
    Redis应用案例,查找某个值的范围(转)
    PHP 正则表达式常用函数使用小结
    PHP转换UTF-8和GB2312的URL编码(转)
    PHP 打印调用函数入口地址(堆栈)
    php CI框架nginx 配置
    apache部署多个项目
    Apache+php在windows下的安装和配置
    appium测试之获取appPackage和appActivity
  • 原文地址:https://www.cnblogs.com/sweetchocosvzwrld/p/14702887.html
Copyright © 2011-2022 走看看