• 【面向对象】第二单元总结——电梯


    设计策略

    本次作业开始引入多线程编程。

    第一次作业是实现单部单请求电梯,我采用的策略是通过输入把请求保存在调度器的队列中,调度器会向电梯发出指令以驱使其运行。

    第二次作业是实现单部多请求电梯,我采用的策略是输入之后,调度器对输入请求进行处理,然后保存在电梯的不同队列中(向下运行队列、向上运行队列),电梯按照运行队列的顺序运行。从总体上来说,电梯的运行模式是上下行交替。

    第三次作业是实现多部多请求电梯,我采用的策略与第二次类似,不同点是调度器会按一定的算法把请求保存在不同电梯的队列里。

    对于线程终止的说明是,输入终止会记录标记,电梯队列为空并拥有终止标记时停止运行。

    代码度量

    第一次作业



    第二次作业




    BUG

    BUG内容

    自己出现的BUG内容主要是如何向队列分配请求的算法上,还有就是电梯完成当前队列的判断条件上。

    寻找BUG的策略

    由于本次作业与第一次作业最大的不同在于多线程的使用,所以在寻找BUG的时候我会更多地测试并发性,请求同时出现如何处理?能否实现捎带?当电梯停止运行,更新下一个目的地的时候出现了新请求该如何处理?诸如此类的问题......

    心得体会

    设计原则

    在本次作业中我运用到了单例模式、工厂模式、生产消费模式等成熟的设计模式,同时也注意遵循单一责任原则、开闭原则等设计原则。使用成熟的模型,并遵循良好的规范可以使我的程序在运行时更加稳定,程序的运行逻辑更符合我对它的期望,不会出现一些奇奇怪怪的BUG,难以定位。就算是出现了BUG,也多半是自己设计上的失误,能够较快更正。

    线程安全

    要写好本次多线程作业,我觉得务必要把锁与同步的细节弄清楚。notify和wait如何配合使用?锁对象和锁方法究竟有什么区别?弄清楚这些之后,才能确保线程运行的逻辑在我们的控制之下。

  • 相关阅读:
    div定位左右居中
    highcharts绘制3D倾斜的饼图
    Echarts 图表不能渲染问题整理
    RK:系统手势监听
    RK:网络共存、Shell脚本
    泛型
    ArrayList类
    Linux(centos7)安装ClickHouse
    centos安装宝塔命令
    centos下修改hosts文件以及生效命令
  • 原文地址:https://www.cnblogs.com/LifeIsAGame/p/10761869.html
Copyright © 2020-2023  润新知