OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变高,我们对线程的理解也逐渐加深.下面笔者将对三次作业分别进行总结. 一.单部多线程傻瓜调度(FAFS)电梯 说明:本次作业需要模拟一个多线程实时电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出.本次作业对性能要求非常宽松,不需要进行优化处理.…
经过第一单元作业的训练,在做第二单元的作业的时候,要更加的有条理.但是第二次作业多线程的运行,带来了更多的运行的不确定性.呈现出来就是程序会出现由于线程安全问题带来的不可复现的bug.本单元的作业也让我更加认真的思考了性能和架构之间的关系,对于工程架构的设计有更进一步的认识. 历次作业分析和总结: 第一次作业:单电梯的傻瓜调度 类图如下: 第一次作业由于并没有性能要求并且刚刚接触多线程的运行,程序的结构简单并且多线程的各个线程之间并没有很多的交互.第一次作业设计中为了第二次作业的扩展,只是简单的…
目录 OO Unit2 博客作业 基于度量来分析⾃己的程序结构 复杂度分析 架构分析 改进和重构 发现过的BUG 简化问题 多线程初探 OO Unit2 博客作业 基于度量来分析⾃己的程序结构 自认为自己的架构不算特别复杂,一个电梯类,一个请求队列.代码量也挺少. 复杂度分析 类复杂度: 方法复杂度: 看了idea自带的代码分析,和我原先想的一样.复杂度最高的是电梯类和请求分析类.请求分析类因为要每次更新请求列表,SCAN下一个目的楼层,所以复杂度自然就高.其实我的代码也没有其他东西了. 架构分…
第二单元的问题是写一个关于电梯调度的程序. 需要模拟一个多线程实时电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出. 主要锻炼学生的多线程程序编写能力. 由于需要实时的输入和输出,我们不得不采用多线程. 在这个单元中任务仍然被分为三个小任务: ①完成单电梯(随时允许输入) ②单电梯+(楼层增加负层,必须使用比先来先服务更加高效的算法) ③多电梯调度(增加重量限制.楼层停靠限制.换乘) 一.调度算法设计 单电梯的调度算法: 我在网上寻找调度…
电梯系列第一次作业 功能描述: 傻瓜电梯无需考虑超载捎带 线程模式: Producer-Consumer Pattern 思路: 第一次作业是一个傻瓜电梯,分别有一个生产者生成电梯指令(也就是Input接口),和一个消费者电梯(Process)运行指令和一个电梯调度器, 调度器为生产者和消费者共享,在生产和消费指令时,给队列上同一把锁,再通过wait();和notify(); 进行阻塞和唤醒调度器将生产者生产的命令放入电梯中,存放指令的队列使用的是Arrylist.   线程安全: 由于Arra…
告别了三次奇妙无比的求导作业之后,我们就开始搭建一部自己的电梯了.相信我们不同同学的电梯运行方式肯定各具特色吧,但值得肯定的是,在艰苦的走完了三次电梯逐步改进的作业之后,我们的电梯在正常情况下应该是可以运作了-所以当我们一起坐电梯,相信我们的电梯应该是不会接不到人.把人最后关在里面.莫名其妙的就把人给丢了以及把人送到+或者是-的啦.下面是我对这三次作业的总结与分析- 在三次作业中我都是用的三个线程.一个是main线程,主要负责构造并start另外两个线程,构建调度器对象:另外两个是Request…
一.多线程知识总结 1.线程同步 有关创建线程的知识就不过多的叙述了.就从主要的开始讲吧,讲一下线程的同步.与操作系统中的进程同步一样,线程同样面临着资源共享的问题,怎样处理线程的资源共享是运用多线程最重要的地方.在Java中是引入锁这一概念来处理多线程之间的资源竞争的关系的.“锁”的对象可以是代码块,方法,还可以是对象.一旦某一部分被锁住,我们称该部分获取了锁.那么在java多个线程中,只有拥有锁的线程才可以运行,其他线程不能运行.如果我们将竞争资源的代码块锁起来,就可以避免发生冲突.在运用锁…
第五次作业:多线程电梯调度 设计策略 ​ 在本次电梯作业当中,我构造了一个电梯请求队列线程,一个调度器线程,三个电梯线程,一个文件输出线程,还有主线程. ​ 调度器扫描用户的请求队列,将每个队列分配给符合要求的电梯,每个电梯有自己的请求队列,电梯根据自己的请求队列来改变自身状态. ​ 同步控制主要包含两个点:用户请求队列会被调度器和请求队列输入线程操作,需要进行同步控制,电梯内部的运行队列也会被电梯本身和调度器操作,也需要进行同步控制. ​ 同步控制上,我用了synchronized关键词和wa…
单元统一的多线程设计策略 类的设计 电梯 每部电梯为一个线程. 电梯从调度器接收原子指令,知晓自己的状态(内部的人/服务的人.运行方向.所在楼层) 原子指令包括且仅包括: 向上走一层 / 向下走一层 让哪些人进电梯 让哪些人出电梯 而电梯不可见其他电梯的状态.不可见调度队列的内容 相当于电梯只是一个输出器和状态储存器,大大解耦 输入器 输入器为一个线程. 输入器直接将输入的指令加入调度队列(在第三次作业时可能会将指令进行拆分后再一一加入) 输入器与调度器.电梯均无关,不直接传送数据 调度队列 调…
三次作业要求简介 特点:目的选层电梯 在电梯的每层入口,都有一个输入装置,让每个乘客输入自己的目的楼层.电梯基于这样的一个目的地选择系统进行调度,将乘客运送到指定的目标楼层. 第一次: 在任意时刻输入一个或多个请求,包括出发层.目的层.乘客的id(每一个乘客有独有的id,且我们设计的系统是直到这个id的) 电梯可以控制谁能出电梯.谁能进电梯 在到达楼层.开门关门.出人进人时输出 第一次作业是单电梯,电梯能够在1-20楼运行 第二次: 初始有3部电梯,可以通过指令增加1-2部电梯 第三次: 有三种…