其他分享
首页 > 其他分享> > BUAA_2022_OO_Unit2总结

BUAA_2022_OO_Unit2总结

作者:互联网

OO Unit2总结

题目概述

本单元作业任务为实现一个模拟多线程的电梯调度系统。

HW5为迭代的基础:多部纵向非换乘电梯。具体为基于一个类似北京航空航天大学新主楼的大楼,大楼有 A,B,C,D,E五个座,每个楼座有对应的一台电梯,可以在楼座内 1-10 层之间运行。系统从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行实时输出。电梯系统具有的功能为:上下行,开关门,以及模拟乘客的进出。

HW6增加了自增设横向与纵向电梯的功能,但保证所有请求不用换乘。

HW7增加了需要处理换乘的请求。

架构分析

HW5

采用look策略,在运行方向上,每运行到一层判断该层的等待队列,允许同方向的请求进入电梯,如果电梯内无请求运行方向上电梯外楼层中无请求,则反转方向,若该电梯的等待队列为空且输入已经停止,则线程结束。

 

 

 

HW6

横向电梯与纵向电梯同样采用look策略。特别的,对于横向电梯而言:规定由A到

E的方向为正向,通过模运算判断运动方向

direction = (des - nowBuilding + 5) % 5;

HW7

MethodCogCev(G)iv(G)v(G)
Controller.Controller(RequestQueue, CopyOnWriteArrayList<RequestQueue>, CopyOnWriteArrayList<FloorQueue>) 0 1 1 1
Controller.run() 15 4 10 11
Elevator.Elevator(int, RequestQueue, FloorQueue, int, int) 0 1 1 1
Elevator.canIn() 7 4 2 8
Elevator.canOut() 3 3 2 3
Elevator.close() 0 1 1 1
Elevator.getDirection() 151 7 32 44
Elevator.getName1() 0 1 1 1
Elevator.in() 8 3 3 8
Elevator.move() 1 1 2 2
Elevator.open() 0 1 1 1
Elevator.out() 3 1 3 3
Elevator.run() 21 3 11 12
FloorQueue.FloorQueue() 1 1 2 2
FloorQueue.addFloorQueue(PersonRequest) 0 1 1 1
FloorQueue.getQueue(int) 0 1 1 1
FloorQueue.isEmpty() 3 1 2 3
FloorQueue.removeFloor(int, PersonRequest) 0 1 1 1
FloorQueue.size() 3 1 3 3
Input.Input(RequestQueue) 0 1 1 1
Input.run() 7 3 4 4
Main.main(String[]) 1 1 2 2
RequestQueue.RequestQueue() 0 1 1 1
RequestQueue.add(PersonRequest) 0 1 1 1
RequestQueue.getFirst() 5 2 4 5
RequestQueue.getOne() 0 1 1 1
RequestQueue.getQueue() 0 1 1 1
RequestQueue.isEmpty() 0 1 1 1
RequestQueue.isEnd() 0 1 1 1
RequestQueue.remove(PersonRequest) 0 1 1 1
RequestQueue.setEnd(boolean) 0 1 1 1

同步块与锁的分析

在用到共享队列的地方都通过synchronized加了锁,同时在共享对象类内对自身属性读写的方法也都加了锁

Bug策略

心得体会

本单元第一次作业的线程安全问题的处理在当时的一周初步接触多线程带来了较大的困难,在研究锁、同步块…的过程中一边学习一边摸索,整体的生产者消费者设计架构可以在实验中获得很大的启发。在研究实验代码的过程中逐渐理解多线程的原理。

总体而言难度相比第一单元简单一些(有实验代码的启发),迭代开发的难度也不会很大,电梯的策略与调度的策略一旦构思好,可以较为顺畅的写出来,后续debug大都面向线程安全与调度策略进行测试,debug的难度也比第一单元有所降低。

个人问题是中测截止前没有认真debug,对测试数据的构造没有多加分析与考虑,简单的测试便放心的提交,导致强测出现低级的bug,下一个单元要更加认真继续努力↖(^ω^)↗

 

标签:OO,int,请求,RequestQueue,BUAA,Elevator,FloorQueue,电梯,Unit2
来源: https://www.cnblogs.com/qiaoqiaoblog/p/16207241.html