-
BUAA-OO2022-UNIT2总结
一、前言 本单元主要是通过电梯系统来训练多线程的相关应用。个人认为在难度跨度上没有第一单元那么大,但是debug的难度大大增加,对于加锁部分也更需要逻辑清晰、结构合理。本人第一次借鉴实验课的架构,把个人认为多余的调度器删除,之后在架构上都没有太大的改动,主要是增加各种“补丁“。但是综合来看思路还是不 -
第二单元总结
第二单元总结 一、三次作业架构设计 1、第一次作业 第一次作业需要实现每个楼座只有一部纵向电梯的调度与运输,因此我采用了生产者-消费者模型,将输入的请求放入等候队列中,由调度线程根据请求到达的早晚来将请求分配给不同的电梯,而电梯则在运行过程中根据ALS算法判断应该在什么时候开关门以及运送哪些乘客。其 -
BUAA_2022_OO_第二单元总结
#线程安全——同步块与锁 在三次作业中,我均选用了synchronized锁。一方面,它实现简单,可自动释放,不容易出bug;另一方面,作业中的读写操作都比较简单,读读、读写、写写均互斥也不会造成太大的性能影响。 ###第五次作业 所有同步块均设置在共享对象类RequestQueue的方法中,所有加 -
BUAA OO 第二单元总结
综述 本单元的任务为模拟多线程实时电梯系统,主要考察多线程运行和交互的实现。在这三次作业的迭代中,第一次作业只涉及多部电梯的运行和电梯与调度器的竞争;第二次作业允许同层或同座多电梯运行,由于采用自由竞争策略,涉及到多部电梯竞争同一等待队列;第三次作业增加换乘策略,增加电梯的请求传递交互。通过三次作业 -
BUAA面向对象课程博客 第2弹:简单电梯调度系统
#1 概述 本单元我基于Java完成了一套多线程电梯运行与调度模拟系统。本文中我将按本单元3次作业的迭代顺序,总结我的设计思路与关键实现细节。通过本文,你可以了解到: 简单的Java多线程设计模式 多线程程序的增量开发方法 #2 作业回顾 ##2.1 第一次作业 本单元实现了北航新主楼A-E座共享输 -
OO第二单元总结
一、同步块的设置 在第二单元的作业中,我只使用了同步块的设置,没有使用读写锁,因此仅就同步块这一方面来介绍我三次作业的设计。从第一次作业初上手多线程,对于synchronized懵懵懂懂、看wait/notify晕头转向,到第三次作业已经摸清了这些关键字、内置方法的机理,能够肉眼分析出轮询的bug, -
20373222李世昱第二单元总结
第二单元博客总结 第五次作业UML类图和时序图如下: 由于第五次作业整体比较简单,该次作业并无过多迭代性考虑,采用的是标准的生产者消费者模式,INPUT线程不断读入新的数据发送给调度器,调度器把符合对应楼座的请求发送给对应的电梯,剩下的交给电梯自己不断处理。 同步性控制:第五次作业共享数据比较少,所 -
BUAA OO 2022 第二单元
↓ gitPage 博客链接: https://mmmusel.github.io/2022/05/01/OO-Unit2-summary/ 一、电梯的调度策略 1.1 状态转移图 1.2 纵向电梯的LOOK算法 LOOK算法实现 与真实的电梯大致相同的策略,即维护电梯当前运行方向dir,更远层无请 -
OO 第二单元博客作业
OO 第二单元博客作业 第一次作业 题目简述 用多线程实现一个目的选择电梯系统。其中共有五部独立的纵向电梯,请求的出发点和目标点必定位于同一楼座 UML图 架构分析:由于本次作业请求类型单一,且电梯数目确定,未使用调度器处理请求 MainClass:负责电梯的创建和输入线程的启动 InputThre -
2022北航面向对象第二次作业分享及总结
本次作业由三次子任务组成,从3月28号开始,迭代开发,实现了一个多线程实时电梯系统。本次项目是笔者第一次接触多线程开发,在迭代过程中逐步熟悉了多线程的设计方法。本文将会主要从架构设计、线程安全以及策略问题三方面进行分析总结。