oo unit2博客-lyt

oo unit2博客

在这里插入图片描述

hw5

1.同步块的设置和锁的选择
在第一次的作业之中我将每个电梯的楼层等待队列作为锁,因为我只有一个集中的策略类(CentralController.java),每次新的请求由该策略类进行分配,当有新的请求是通过该对象唤醒对应的线程即可。
2.调度器设计
hw5中我使用了一个策略类进行分派,由于hw5限制了电梯的选择因此其实只需要根据请求进行调度就行了。具体操作是将其在电梯的楼层等待队列不被占用时调度器直接插入等待队列即可。至于捎带则由电梯之中的策略方法自行判断(高耦合低内聚)
3.调度策略总结分析
调度策略上面我用了一个较为简单的look算法进行调度,这里没有管性能指标。
4.uml类图以及时序图
在这里插入图片描述

在这里插入图片描述

hw6

1.同步块的设置和锁的选择
这里在一开始为了适应对于电梯的基本信息的修改,将电梯的基本信息划分为了一个线程安全的类,后面由于使用了生产者消费者模式建立了一个请求缓冲区并不需要了,但是该基本信息类仍然保留了下来。最后唯一需要上锁的只有缓冲区,使得当电梯从缓冲区之中拿走东西的时候不会和正在往缓冲区之中塞东西的策略类冲突。
2.调度器设计
调度器只需要与对应的缓冲区交互写入需要选取的策略就行了。
3.调度策略总结分析
这里采取了打分的方式,每个请求进来之后给每个电梯计算对应分数,分数最高的拿到该请求,被策略类发送到电梯缓冲队列之中。
4.uml类图以及时序图
在这里插入图片描述

在这里插入图片描述

hw7

1.同步块的设置和锁的选择
与hw6基本相同,不过多了一个对应换乘楼层的专门的锁,当一个轿厢占用该锁时就会将这个锁给锁上。
2.调度器设计
调度器仍然与hw6类似。
3.调度策略总结分析
调度策略仍然与hw6类似,基于时间以及耗电量,通过期望值算出期望最经济的电梯然后分配给它,当电梯重置或者到达换乘楼层后又分配给调度器重新调度。
4.uml类图以及时序图
在这里插入图片描述

在这里插入图片描述

5.实现轿厢避免碰撞
通过对对应换乘楼层加锁即避免碰撞,当一个轿厢要到达换乘楼层时通过对该加锁的对象notify告知另一个轿厢离开,同时等待另一个轿厢让出该楼层,另一个轿厢让出该楼层后便notify唤醒等待的轿厢让其进入。

bugs and debugs

hw56都没有找到任何bug(自己的和同学的),hw7自己在某些情况下会电梯一致死循环(由于策略类条件加少了导致将请求一直分配给同一个轿厢),hw7我使用将每个轿厢都同时reset占用的方法成功hack了3个同学。

三次作业稳定的内容和易变的内容

稳定的内容是基础的look算法,电梯捎带策略。易变的地方是电梯的分配策略以及相关的条件判断。

心得体会。从线程安全和层次化设计两个方面来梳理自己在本单元三次作业中获得的心得体会

线程安全方面我认为方法锁和对象锁在各自擅长的领域都是对方取代十分麻烦的,另外最好给共享对象加锁的同时减少共享对象的数量。层次化设计而言我的代码层次区分其实并不明显,我认为我的代码是低内聚高耦合的,不太好。这次的作业依然都十分简单,应该下一届增加难度。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值