OO第二单元总结

前言

        本单元基于多线程程序相关内容,模拟多线程实时电梯系统,熟悉线程的创建、运行等基本操作,熟悉多线程程序的设计方法。

        多线程:通过加锁和解锁,使临界区最多执行一个线程

                                关键字 synchronized 实现加锁:用其将托盘类设置为线程安全类 

                                方法 wait() 释放锁

                                方法 notify() 释放锁并唤醒线程

        架构:使用生产者消费者模式,输入线程作生产者,电梯线程作消费者,中间托盘缓存数据

        调度策略:使用自由竞争策略/构建调度器

        捎带策略:可使用ALS、LOOK等经典算法,也可自己构造算法(如贪心算法)。

        

第五次作业

        作业要求:

        系统基于一个类似北京航空航天大学新主楼的大楼,电梯可以在楼座内 1−11 层之间运行,从标准输入中输入请求信息,程序模拟电梯运行,将运行信息通过输出接口进行输出。​ 本次作业电梯系统具有的功能为:上下行,开关门,模拟乘客的进出。

        难点分析:

                调度和算法:

        ALS策略:

        主请求+被捎带请求

                主请求:

                        电梯中有乘客 ?

                        到达时间最早的乘客请求作主请求 :

                        请求队列中到达时间最早的请求作主请求。

                被捎带请求:

                        电梯的主请求存在&&该请求到达请求队列的时间<=电梯到达该请求出发楼层关门的截止时间&&电梯的运行方向和该请求的目标方向一致。

        避免轮询和死锁

        时序图:

        

 

        架构(类图):

 

        

第六次作业

        作业要求:

        在第一次作业的基础上,掌握线程安全知识并解决线程安全问题,同时在架构上围绕线程之间的协同设计层次架构。

        新增部分:

        模拟电梯系统扩建和日常维护时乘客的调度

        扩建:

                即新建一部电梯放入电梯类,而电梯类也应该是table,是共享资源。

        维护:

                主要考虑乘客退出当前电梯,重新进入请求队列的实现。

        难点分析:

                电梯类是共享资源,需要注意保证线程安全

                注意 如果读取到maintain指令应该尽快维修,而维修结束应该添加为线程的必要条件

第七次作业

        作业要求:

        在前两次作业的基础上,掌握线程之间的交互,强化线程之间的协同设计层次架构

        新增部分:

        信号量的使用:

               Semaphore关键字

                acquire()方法:获取信号量许可

                release()方法:释放信号量许可

        调度器的添加

        路径算法

心得体会

        本单元作业基于多线程设计进行电梯模拟,因此调试会很困难,定位bug比较麻烦。但是基于第一单元训练,代码架构的层次化特征比较清晰,更加符合面向对象的特点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值