BUAA-OO-第二单元总结

张俊华-22373480 2024-04-19 16:38:59

第二单元作业总结

同步块和锁

隐式用法

synchronized

  • 加在方法

    置所有同步块于一个类为最佳,逻辑清晰,管理方便。多线程程序,本就不易调试,代码更宜,清晰易懂。

  • 加在变量

​ 尽量避免使用,因为若变量于非同步块遭到修改,则容易引起线程不安全。若出现此类情况,可以显式锁代之。

显式用法

  • ReentrantLock

    若要保持某变量安全,最好用ReentrantLock显式保护。

  • ReadWriteLock

    若读取次数大大多于写入次数,则宜使用读写锁。

调度器

总调度器

  • 分配乘客至电梯

    1. 获取诸电梯状态。
    2. 根据电梯状态,计算每部电梯运送乘客产生的代价。
    3. 分配乘客至取代价最小者。
  • 传递重置请求

    直接传递即可。

电梯调度

  • 分配乘客至轿厢
    1. 获取各轿厢状态。
    2. 分配之。
  • 重置操作
    1. 将所有乘客的起始楼层改为当前楼层,该出则出,若未达目的地,则化为请求,入电梯请求队列。
    2. 重置。

同步控制

请求队列

所有同步控制皆由请求队列控制。

使用生产者-消费者模式。

调度器行为

每个调度器行为如下:

  1. 处理请求
  2. 更新数据

形象理解

img

轿厢防撞

设换乘层类。

方法有二

  1. 进入方法

    若换乘层有轿厢,则阻塞。而后标志变量置为真。

    若换乘层无轿厢,则进入,标志变量置为真。

  2. 退出方法

    标志变量置为假。

    唤醒。

BUG处理

  • 信息输出

    在电梯运行诸环节输出相关信息。

  • 信息解析

    肉眼看信息,不够直观。可以编写相关解析程序查看错误情况。

心得体会

本单元作业的核心是架构设计,不是实现或者debug。架构清晰,可以规避无数问题和bug。

因此写代码不必着急,虽然我挺着急的,但是好的架构是重中之重。

...全文
39 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧