-
OO Unit2
第一单元总结 第一次作业 第一次作业是构思时间最长的一次作业,目的是为了使后面的作业能够有一个更完整的架构,电梯作业分为以下几个部分:电梯线程,输入线程,乘客类,安全输出类,请求队列。 经过代码分析得知,各个类的代码复杂度维持在可控的范围内,只有电梯线程中的开关门方法复杂度较高,因为需要频繁地访问请 -
OO summary Unit 2
unit 2 总结 本次OO第二单元实现的主要任务为模拟了一个多线程电梯运行的基本场景,**基于“生产者-消费者模式”**实现了满足不同的电梯调度以及运行策略达到满足用户上下楼、换乘等请求的电梯。 不得不说比起往届的博客,可以看出这届的助教还是收手了的,让我们在这一单元的编程充实快乐但又不失必要的痛 -
OO第二单元总结
OO第二单元总结 作业总结 第五次作业 作业简介 这次作业是编写一个简单的多线程实时电梯系统,实现模拟五部电梯接送乘客的功能。 类图与协作图 类图如下: 协作图如下: 各个类含义如下: Main:主类Person:乘客类/请求类AllTable:全局Table(后来发现其实和控制器类似)Table: -
第二单元总结
第二单元总结 1. 作业分析 模拟多线程实时电梯系统,支持换乘。 2. 架构设计 对每个楼层、每个楼座单独构建一个等待队列(PassengerGroup的实例),5个座、10层,共构建15个等待队列。每个等待队列负责该楼层或楼座的全部乘客,该楼层或楼座的所有电梯共享一个等待队列。 Controlle -
BUAA-OO-Unit2
OO_UNIT2 一、作业分析及多线程编程 本单元的作业要求我们使用多线程的方式来实现电梯系统,即在同一时间内实现多部电梯对于多个请求的响应。 在多线程的编程实现中我们理想化的结果是多个线程并行运行的过程中能够对于共享对象进行安全的操作,最终实现线程安全的基础上实现更高效率。 由上面的描述我们已经可 -
2022_BUAA_OO 第二单元总结
2022_BUAA_OO 第二单元总结 同步块的设置 我实现本单元的三次作业的架构较为相似,主体均为生产者消费者模式,在该模式的实现中,介于生产者和消费者之间的托盘类是唯一的共享资源,故同步块只需设置在对这些资源进行访问的代码区域。在我的具体实现中设置了RequestTable类来存放请求,并将其作 -
第二单元总结
总结分析三次作业中同步块的设置和锁的选择,并分析锁与同步块中处理语句之间的关系 三次作业中,我都把同步块放在队列类和输出类中,其他地方没有锁或同步块。这样缩小了同步的范围,降低出现同步BUG的概率。 进入同步块相当于获得锁,退出同步块相当于释放锁,但使用锁更灵活,可以自由控制获得和释放锁的时机,而不 -
BUAA_OO_第二单元总结与反思
锁的应用 读写加锁 synchsynchronized (outlist) { boolean a = inup_h(nowpos); } public boolean inup_h(int nowpos) { for (PersonRequest personRequest : list) { i -
第二单元总结
第二单元总结 本单元的作业围绕着模拟电梯展开,在这个过程中理解并发和多线程是什么,以及如何进行设计多线程的程序,一言以蔽之,多线程的最大的困难在于多个线程如何对共享对象进行不冲突的操作。 由于三次作业有着一定的逻辑关系,故将三次作业整合到一次来描述。 框架设计的进化之路 初识多线程 第一单元是从 -
OO第二单元总结
OO第二单元总结博客 一、同步块与锁 多线程编程的一个难点就是同步块的设计和锁的选择。在哪儿加锁其实是一个技术活儿。如果锁得太少,可能导致线程安全问题,但是如果锁加得太多,又可能会降低多线程程序的运行效率(一种极端情况就是多线程退化为单线程),因此需要仔细考虑多线程锁的设置。 在第一次作业中,我对于