• 第二单元总结


    一、设计策略

      第五次作业

      类图如下:

      此次作业共设计了五个类,分别是:MainClass,主类;InputData类,有单独的线程,用于处理输入数据,并传递给调度器;Elevator类,电梯线程,根据调度器的指令执行上下楼、开关门等操作;Scheduler类,调度器线程,根据电梯当前的状态和所有等待中的请求,计算电梯下一步应做的操作,并通知电梯;Instruction类,用于电梯和调度器之间传递命令。

      在调度算法上,本人采用的是Look算法,电梯会上下扫描式地运送乘客,能避免在某一区域来回运动,浪费大量时间;另外,由于此次作业没有最大人数限制,为了减少开关门的次数,电梯每次开门都会一股脑的将当前楼层所有乘客搭载上,在编写代码时也更方便,但这也给之后的作业埋下了隐患。

      由于此次作业只有一部电梯,本人在设计时误将进出电梯的操作放在调度器类中,导致之后的作业出现多部电梯时,代码难以拓展,只得重新设计。

      第六、第七次作业:

      由于第五次作业的架构设计不够好,可拓展性差,没有为之后的作业做考虑,面对多部电梯的情况只能重构整个架构,导致第六、第七次作业没能顺利完成。

    二、Bug分析

      本人在第五次作业的中强测中没有发现Bug,但是在互测中找出了一个Bug,原因是调度器电梯线程在没有请求(当前请求已处理完毕)时仍在不断运行,导致CPU运行时间超过限制。我也根据自己的Bug设计了针对性的测试样例,在互测屋中找出另一个人相同的Bug。

    三、心得体会

      Java多线程的设计和以往的单线程设计思路大不相同,需要充分考虑线程之间的同步,这也是我认为多线程设计最难的地方,本人正是因为多线程的同步没有思考清楚,才导致此单元的作业没有圆满完成。

  • 相关阅读:
    并查集基础练习
    HDU1232——畅通工程
    二分答案——划分数列
    二分答案——收入计划
    动态规划练习题(2)
    动态规划程序设计2
    动态规划练习题(1)
    0/1背包
    P5024 保卫王国[倍增+dp]
    UVA11424 GCD
  • 原文地址:https://www.cnblogs.com/doconicu/p/12728411.html
Copyright © 2020-2023  润新知