第二次博客作业

本文总结了三种电梯调度算法(FAFS、ALS、SS)的设计与实现过程,对比了不同算法的优劣,重点分析了多线程环境下Worker-Thread模式的应用。作者通过实践,对Java多线程设计模式有了更深入的理解。

第二单元小结

一 设计策略
1.FAFS电梯

经典的生产者消费者模型,结合单例Handler。

电梯硬编码,30行左右解决。

2.ALS电梯

仍是生产者消费者模型,但在电梯中加入捎带队列,每层楼进行tray和捎带队列的更新

3.SS电梯

Worker-Thread模式,建立多个电梯线程并对乘客进行选择。

在捎带算法上仍有较大问题,以至于6,7次作业中测都有点没过。之后会根据代码再做修改。

(笔者与人交际甚少,没有讨论的机会,只能学习在git上的开源代码了,至于设计模式,由于参考书上的12种设计模式大多都阅读并完成过,还算比较熟悉。总体而言,对自己这一单元的的学习情况不甚满意。)

二 程序分析
1.FAFS电梯
类图:

1590906-20190423193305952-1036642689.png

度量分析:

1590906-20190423193311908-1451271725.png

1590906-20190423193315458-556815725.png

BUG分析:

由于电梯硬编码且仅仅是对生产者消费者模型实现,因此没有BUG,且复杂度较低。唯一的问题是ctrl+d模拟结束输入时,需要新添加输入结束标志。

2.ALS电梯
类图:

1590906-20190423193322328-1386454776.png

度量分析:

1590906-20190423193335464-1544747842.png
1590906-20190423193347206-1956069739.png

复杂度有两处较高,原因是每层楼均需要对两个队列进行更新。

由于自己的调度算法出错,公测有一个测试点没过。

3.SS电梯
类图:

1590906-20190423193355221-947750789.png

度量分析:

1590906-20190423193359663-1217775578.png

1590906-20190423193403581-1684560569.png

由于调度算法缺失(第六次作业的问题尚未解决),仍然采用了FAFS,导致强测超时。

三部电梯互相争抢乘客,并把不符合的乘客放回等待队列。因此workerThread.run方法复杂度较高。

三 心得体会

课下阅读完《图解Java多线程设计模式》并对书中内容进行实践,这本书解决了我大部分的设计问题,但是关于调度算法的问题并没有解决。以至于6,7次作业效果不佳。之后应该会阅读同学在git上开源的代码,解决自己在调度算法上的疑惑。

转载于:https://www.cnblogs.com/pandapan-buaa/p/10758459.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值