OO_Unit2 多线程电梯总结】的更多相关文章

OO_Unit2 多线程电梯总结 相比于Unit1的表达式求导,Unit2的多线程电梯听上去似乎显得更加"高大上".但在完成了3个task的迭代后再回过头去比较这两个单元,我发现其实它们的侧重点并不相同:Unit1要更偏重于横向的架构设计,如何实现性能与架构之间的平衡:而Unit2由于涉及了多线程,因此更多的难点与重点则放在了线程安全与同步上.故而单纯的从代码量上来看的话,Unit2似乎反而还要少一些,但这并不意味着Unit2的复杂度有所降低,相反,由于允许线程间时间上的无序性,一切反…
OO Unit2多线程电梯总结博客 传说中的电梯居然就这样写完了-撒花…
概述: 面向对象的第二单元是多线程电梯.第一次实现一部傻瓜电梯,每次只送一个人:第二次实现一部可稍带电梯:第三次实现三部可稍带电梯. 一.设计策略 1.第5.6次作业设计思路 第5.6次作业的架构相似,由一个电梯线程,一个读请求线程,一个调度器组成:电梯和读请求进程通过调度器交互. 读请求线程不断的从标准输入读入请求,将请求存放在调度器的队列中: 电梯线程从调度器中获取请求并执行. 调度器维护一个共享队列,用来存放请求. 读请求线程和电梯线程并发执行,二者对调度器中队列的操作保证互斥,同一时刻只…
OO第二单元多线程电梯总结 第一次作业 设计思路 Input为输入线程,负责不断读取请求并将读到的请求放入调度器中. Dispatcher为调度器,是Input线程和Elevator线程的共享对象,采用单例模式.Dispatcher中list为请求队列,over为输入线程结束的标志,当输入线程读到null时,将over设为true. Elevator为电梯线程,采用傻瓜调度(FAFS). 代码分析 SOLID原则分析 Input线程负责输入,elevator线程负责取指令执行的单一负责线程比较好…
作业2-1 单部多线程傻瓜调度(FAFS)电梯的模拟 I. 基于度量的程序结构分析 1)程序结构与基本度量统计图 2)分析 ​ 这次作业基本奠定了本人三次电梯作业的基本架构,简述如下: Elevator类:定义了"电梯"这一对象,即拥有开关门状态(state:CLOSE or OPEN),电梯内乘客队列(passenger),当前楼层(floor:GROUND~TOP)等. PassengerQueue类: 共享资源区.拥有push(),pop(),isEmpty()方法. Eleva…
第五次作业分析 1.设计策略 调度器采用单例模式,内部设请求队列,对请求队列的一切操作(查.增.删)都在调度器内完成,且都要求串行,从而确保线程安全.接收器和电梯是两个线程:接收器接受请求调用调度器来存入请求队列,接受器关闭时通知调度器:电梯调用调度器来获得请求,电梯从调度获得空请求且查询到接受器关闭时停止运行. 2.度量分析 (1)复杂度矩阵 方法复杂度: 类复杂度: 由于这一次作业是简单的单电梯傻瓜调度,所以方法和类复杂度都比较低. (2)类图 (3)协作图 3.bug分析 没有bug. 第…
一.概述 这一部分的作业考察的关注点与上一次的作业有所不同,上一次的考察重点主要集中在输入输出的判定以及多态的考察上面,而这一次是让我们进行多线程程序的调度与开发.这次开发过程中最大的感受就是自己之前的程序好像都白写了...需要自己去探索掌握的东西有许多.在之前的作业中我们都是尽可能地使用加断点的方式进行调试,因为每次程序运行不会产生二义性,即对就是对错就是错,这时printlog就成为了十分有效的debug方式.同时这一系列的作业是对上一次多态思想的继承,即第一次作业在设计的时候就需要弄清楚可…
这次的系列作业是写一个电梯调度,主要目的是让我们熟悉多线程. 第一次作业是一个傻瓜电梯的调度问题,要求也很简单,即每次接一个人就行了.我只用了两个线程,一个是输入线程,一个是电梯线程,输入线程负责从标准输入中读入请求并加入到请求队列中,电梯线程负责从请求队列中取出请求并执行,思路非常简单,每次取一个请求,把人送到后,再取下一个,直到取完并且输入停止. 第二次作业没有什么本质区别,只不过修改了调度算法,在电梯运行时进行捎带,我这里的思路是,先找到一个主请求,然后在去接主请求和送主请求去目的地的路上…
一.设计策略 在第一次作业时,我刚第一次接触多线程这个东西……于是乎对于第一次VIP直上直下一次只接一个人的电梯,我借鉴了指导书中为我们提供的架构,设计了一个输入线程和一个电梯线程,并设置了一个中间类RequestQueue,开一个队列来存放异步输入的请求,并保证这个类是线程安全的.mian类之下的整体架构为“Getrequest-RequestQueue-Elevator”.在main类中仅仅只做了new了这几个类并且启动输入线程以及电梯线程的工作.当电梯运行时,GetRequest线程读入请…
一.三次作业总结 1. 说在前面 对于这次的这三次电梯作业,我采用了和几乎所有人都不同的架构:将每个人当作一个线程.这样做有一定的好处:它使得整个问题的建模更加自然,并且在后期人员调度变得复杂时,可以将调度器上纷繁的逻辑判断分布在不同的人身上,大大简化了代码逻辑.对于程序复杂度,将人作为某个容器中的PersonRequest时需要在电梯到达某一层时进行遍历,而将人作为线程池中的一个任务则是通过wait()和notify()机制实现了类似的线程遍历,对于此次最多40人的简单任务而言并不会在时间上损…