• OO第二单元总结


    1 同步块设置和锁的选择

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

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

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

    2 调度器设计与线程交互

    controller:调度器线程

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

    线程运行:循环

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

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

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

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

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

    elevator:电梯线程

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

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

    电梯状态:

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

    运动:

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

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

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

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

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

    UML图

    bug策略

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

    2 输入边界数据

    心得体会

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

  • 相关阅读:
    return2libc实验
    Makefile初探
    Rails连接oracle配置
    ubuntu16.04配置openproject开发环境步骤
    nginx配置详解
    Ubuntu16.04安装及配置nginx
    同源策略以及绕过此限制的方法
    mysql中整数类型后面的数字,比如int(11),11代表11个字节吗?
    0412ooday01.txt=============对象和类(上)
    0426JavaSE01day02.txt=========正则、Object、包装类详解
  • 原文地址:https://www.cnblogs.com/sweetchocosvzwrld/p/14702887.html
Copyright © 2020-2023  润新知