第一次作业 乘客的请求信息:起点层和终点层不同,起点座和终点座相同。如1-FROM-A-1-TO-A-2 思路:采用LOOK策略。若同方向上没有请求且电梯里的乘客的目的地都在反方向,则转换电梯运行方向。(捎带前往目的地与电梯运行方向相同的乘客) UML类图 自己程序的bug 输出时间戳没递增 第二次作
一、同步块的设置和锁的选择: 关于 synchronized : 大概的使用方法有这两种。 synchronized(this){ // 同步代码方法块 } synchronized void method() { //method 具体实现 } 关于 lock : 大概的使用方法以及接口的实现类: ReentrantLock , ReentrantReadWriteLock.ReadLock , Ree
OO Unit-2 Summary 第一次作业 同步块的设置和锁的选择 在本单元的作业中,我选择了以JVM实现的synchronized作为锁。用生产者和消费者模式对应本单元的作业,可以发现,共享的“托盘”只有电梯的等待队列,一方面,输入处理线程要将新的请求放入等待队列,另一方面,电梯不断读取处理队列的
一、第二单元电梯作业设计思路 初次接触多线程的问题,对于作业的设计思路一开始比较迷茫,后来通过阅读上机实验的代码,觉得采用“生产者-消费者”的模式比较合适,遂模仿实验的思路设计了InputHandler、Schedule、RequestQueue来进行输入数据的实时处理和调度,事实证明这一架构模式的设
第二单元总结 一、同步设计 三次作业中均只使用了synchronized修饰词来进行线程的同步,并且主要针对读写冲突进行保护。在三次作业中均使用OutputQueue类对输出信息进行封装,保证其线程安全。对于使用最多的共享类RequestQueue,其读写方法getOneRequest、addRequest、removeReques
伴随着一路艰辛,oo的第二单元正式告一段落,无论是对作业的回顾,还是自己走过这一单元的心得,正好也就借此博客一书胸臆; 好了,文青的话结束了 总而言之,欢迎大家看我的博客,顺便给几个赞呗 单元回顾 本单元以电梯调度为背景,聚焦于多线程的设计和处理 第一单元 存在A、B、C、D、E五栋楼,每栋
第二单元总结 第五次作业 代码架构:生产者模型 单独一个线程InputHandler用来接收输入数据. 设立共用调度器Controller用来作为缓冲区对数据进行操作. 电梯elevator作为消费者模型用来向调度器发出指令处理数据. 调度算法:半优化ALS算法 即不仅携带与主请求目的地同方向的
OO第二单元总结 同步块与锁 多线程编程目的是为了加快程序运行速度,线程之间会共享资源,由此自然而然会产生类似于计组C流水线PU中读写不一致的问题,故必须要正确地加锁。 通过阅读训练教程和相关资料,了解到了原子操作的概念以及各种加锁的方法。虽然有更高级的条件锁以及读写锁等
第五次作业 代码架构 我的代码种设计了两类线程,电梯线程Elevator和输入线程InputThread 每个电梯线程与输入线程之间有独立的共享对象RequestQueue,从而避免两个线程之间直接交互造成线程安全问题 输入线程与等待队列之间采用观察者模式,输入线程作为被观察者,等待队列为观察者,接到
第二单元博客 1 同步块的设置和锁的选择 1.1 锁的选择 第二单元第一次课讲了synchronized上锁的方法,而之后的课程中又讲了ReentrantLock高级锁。尽管ReentrantLock可以实现更多的线程控制功能,但是考虑到相对来说使用synchronized代码实现比较容易并且不容易出错,因此三次迭代
第二单元博客 目录 一、同步块与锁 1.1 同时读/写 1.2 输出 1.3 流水线架构模式 二、调度器设计 2.1 第五次作业 2.2 第六次作业 2.3 第七次作业 三、架构模式 3.1 设计模式 3.1.1 生产者-消费者模式 3.1.2 master-slave模式 3.1.3 流水线模式 3.1.4 单例模式 3.2 三次作业架构设
OO第二单元总结 摘要 第一次作业:基本目标是模拟多线程实时电梯系统,模拟多部同型号电梯的运行,熟悉线程的创建、运行等基本操作,熟悉多线程的设计方法; 第二次作业:在第一次作业的基础上,掌握线程安全知识并解决线程安全问题,同时在架构上围绕线程之间的协同设计层次架构,模拟一个多线
OO_Unit2_单元总结 Part0 综述 本单元三次电梯作业依然是在逐次迭代的基础上进行开发的。其中第一次作业要求我们实现一个每座只有一个纵向电梯,无新增加电梯的请求并且乘客的请求仅限于同楼座不同楼层的电梯系统。第二次作业相较于第一次作业添加了横向电梯的概念,并且可以通过请求
考虑到三次作业的迭代性,我将详细的文件结构和度量分析都放在了task3的部分里,前两次就简单略过了。 task1 初识多线程时的个人思考 线程涉及 获取输入的线程:new Thread(new MyInput(sceduler)) 调度器线程:new Thread(scheduler) 每个电梯控制器的线程:new Thread(ec) 在开关门时,主
OO第二单元总结 第一次作业 题目要求 A、B、C、D、E五栋楼均有10层,每栋内有一座纵向电梯,输入为同一楼座不同楼层的请求。需要模拟电梯的运行,并输出开门、关门、乘客进出信息。 设计思路 参考了实验的思路,建立输入线程、控制器线程、电梯线程,建立请求队列类。输入线程将输入的请求
OO第二单元总结 架构设计 三次作业中我逐步形成了如下的架构设计: 运行策略 电梯运行策略为ALS策略,即确定主请求后再考虑捎带请求。 RequestQueue的子类中把请求分为已分配的请求和未分配的请求。当电梯发出分配请求时,会根据电梯当前状态(运动方向、所在楼层、所在楼座)以及等待
OO unit2 需求迭代 第一次作业 输入:只有乘客的搭乘请求,搭乘请求为纵向 一共有五台纵向电梯,分别对应五个座ABCDE 第二次作业 输入:乘客的搭乘请求,搭乘请求为纵向或者横向;电梯的增加请求 初始有五台纵向电梯 第三次作业 输入:乘客的搭乘请求,搭乘请求为纵向或者横向或者
BUAA_OO_第二单元总结 第二单元主要实现电梯的调度问题。主要为了实现单部电梯、多部电梯、横纵向电梯的调度。 第一次作业 作业要求 第一次作业要求完成纵向电梯第调度问题。五个楼座各配置一部具有一至十层移动能力的电梯。电梯具有固定的移动速度、开关门速度和承载量
OO第二次总结 一、架构设计体验 本次作业的主要目的,是实现一个多楼座(A,B,C,D,E)、跨楼座运行,支持换乘,调度等功能的多线程电梯。 对于该问题,我主张采用经典的生产者-消费者模型。从Person类出发,构建了相应的共享资源,Table,Dispatcher等等。 线程及同步控制块与锁 在这一次电梯的作业架构
OO第二单元总结 作业总结 第五次作业 作业简介 这次作业是编写一个简单的多线程实时电梯系统,实现模拟五部电梯接送乘客的功能。 类图与协作图 类图如下: 协作图如下: 各个类含义如下: Main:主类Person:乘客类/请求类AllTable:全局Table(后来发现其实和控制器类似)Table:请求队列Request:
目录unit 2 总结同步块的设置和锁的选择调度器设计架构模式程序的bug发现他人bug的策略心得体会 unit 2 总结 本次OO第二单元实现的主要任务为模拟了一个多线程电梯运行的基本场景,基于“生产者-消费者模式”实现了满足不同的电梯调度以及运行策略达到满足用户上下楼、换乘等请求的
第二单元总结 第二单元的作业,由于我在最开始设计架构的时候投入了较多时间,很多地方都考虑了后续作业可能需要拓展的地方,所以我的三次作业整体架构几乎没有什么变动。 整体上采用了生产者与消费者模式,将输入类、调度器类、电梯类继承Thread,GeneralQueue和WaitingQueue则是线程安
同步块的设置 本单元的基本架构由以下三个主要部分组成: Inputhander:用来接收、分类输入,是线程。 Controller:用来处理输入、处理结束、是共享对象。 Elevator、Conveyer:电梯本身,用来接送乘客,是线程。 出于输出线程安全的考虑,再外加一个Outputer的单例对象,用于处理所有的输出。 因
OO 博客 第二单元 第五次作业总结 本次作业的基本目标是模拟多线程实时电梯系统,熟悉线程的创建、运行等基本操作,熟悉多线程的设计方法。 共享对象 Checkend类的checkend,PersonRequests类的personRequestsA……personRequestsE和waitingpersonRequestsA……waitingpersonRequestsE
综述 本单元的任务为模拟多线程实时电梯系统,主要考察多线程运行和交互的实现。在这三次作业的迭代中,第一次作业只涉及多部电梯的运行和电梯与调度器的竞争;第二次作业允许同层或同座多电梯运行,由于采用自由竞争策略,涉及到多部电梯竞争同一等待队列;第三次作业增加换乘策略,增加电