-
BUAA_OO_2022_Unit_2_Summary
一、程序设计构架 第一次作业 需求简述: 模拟一个多线程实时电梯系统,各楼座有且仅有一台纵向电梯,处理已知起终点的同楼座乘客请求。 代码构架: |- Unit2:主类 |- InputHandler:输入线程 |- Controller:各楼座候乘表 |- Elevator:电梯线程 |- Outp -
OO第二单元总结
第二单元总结 一、同步块与锁 线程的同步与锁的应用是多线程中不可避免的问题,那么首先就来谈谈这三次作业中同步的实现位置,以及实现方式。 哪些地方需要用到同步块和锁 电梯总体的逻辑都是大致相同的,无非是乘客输入请求、调度器分发请求、电梯完成请求。之所以多线程要用到同步就是因为有共享数据,多个线程同时读 -
OO第二单元总结
在第二单元主要训练了我们的多线程编程和设计能力。 第一次作业 总体设计 在第一次作业中,我采用了生产者消费者模式。在主线程里读入数据,将请求放入请求队列里。我在请求队列的设置里设置了五个Arraylist,分别对应着五个楼层。之后电梯作为消费者完成请求。 在调度策略方面我采用的是LOOK策略。其实在 -
OO2022第二单元作业总结
本文为OO2022第二单元总结。本次作业主要以电梯系统的设计为内容熟悉和熟练掌握线程方面的知识。主体思路上我才用了生产者消费者模式,在文章中分别阐述了三次作业中的主要思路,调度器设计与交互,同步代码块的设置与锁的选择。之后利用UML类图,与方法复杂度分析了本次作业架构的不完美之处,最后分享了自己在本次作业中关于层次化设计与线程安全的心得体会。如有错误,谢谢指正! -
面向对象2022-第二单元作业总结
面向对象2022-第二单元作业总结 第一次作业 本次作业是在单栋楼中设置一部电梯接送上下楼的乘客。 (1) 同步块设置&锁的选择 这次作业是多线程作业伊始,能否处理好锁与同步块之间的线程安全,让不同线程间可以共享数据并且保证安全,对多线程作业的发展具有重要意义。在对题干进行一番迅速却又不失严谨的推理 -
OO_Unit2_Summary
OO第二单元总结 一、同步块的设置和锁的选择 在三次作业的设计中,我都是通过对电梯的共享队列加锁来实现控制的。将对共享对象进行操作和访问的方法用synchronized修饰以处理读-读和读-写冲突。由于作业采取生产者-消费者的设计模式,因此只需对托盘(即请求队列加锁)即可解决线程不安全的问题,这种方 -
2022面向对象设计与构造第二单元总结
一、第一次作业 1.1 同步块与锁 第一次作业的锁主要设在RequestQueue类,这个类的核心属性是一个Arraylist<Request> 容器,而RequestQueue类也重写了Arraylist的size(),get(),add()等方法,并为这些方法加上了类锁。在第一次作业中,Requ -
BUAA_OO_2022第二单元总结
1 概述 1.1 基本思想 让各个线程处于临界区的时间尽可能短,因此要让临界区操作尽可能简单,这样也有助于避免线程安全问题 电梯只负责乘客上下电梯与电梯的上下移动,电梯的控制工作交给调度器完成 在满足上述两个条件的前提下,代码实现要尽可能简单,即使有可能损失一些性能 注:该作业中没有使用UML类图与 -
OO2022第二单元个人总结
OO2022第二单元个人总结 本单元主要内容为设计多线程电梯运行程序,在架构方面我主要采用了生产者-消费者模型,三次作业的主要结构都为input类,elevator类,waitQueue类,运行逻辑上可以概括为由elevator向waitQueue发起查询后再获取目标容器,其中可能产生诸如读了脏数据 -
面向对象第二单元博客作业
Unit 2 - Multi Threading Programming