一、设计策略

三次作业中,由于前两次作业都只有一部电梯,因此我的线程只有两个,一个等待队列输入进程,以及一个电梯运行进程。等待队列输入进程实现十分简单,只需要根据输入把request添加到等待队列即可。第一次作业电梯线程是傻瓜调度(FAFS)电梯,实现极为简单,只需从等待队列拿出一人,电梯将其带到指定楼层即可。第二次作业电梯线程为可捎带调度(ALS)电梯,程序实现开始复杂,在电梯接主请求的过程中,电梯每到一层楼会判断这层楼是否有等待的request,如果有就会捎带上。而第三次作业有三部电梯,并且每部电梯可停留的楼层、上下一层的时间都不一样,于是我写了三个电梯进程来实现作业的要求。

三次作业均采用synchronized关键字实现互斥访问共享数据(共享对象)来实现线程同步与通信的。访问共享对象(请求队列)为空,则令线程wait,在请求队列放入请求后,notify通知正处于wait的线程。

二、程序分析

1、第一次作业(FAFS电梯)

类图:

度量分析:

bug分析:由于第一次作业较为简单,因此bug较少,在自己写代码的过程中,主要遇到了整个进程无法结束的情况,主要由于自己没有考虑到结束进程的问题。之后发现了自己的bug之后,在等待队列增加request的线程以及电梯线程增加了结束判断,进程就可以结束了。

2、第二次作业(ALS电梯)

类图:

度量分析:

bug分析:这一次的bug主要是由于电梯进程CPU超时,主要是因为采取了while(){continue}的暴力轮询,将之改为wait()notify()结构,就可以避免。但是由于自己在开关门问题上没有考虑清楚,导致电梯在某个楼层同时有进人和出人情况时,门打开了两次。

3、第三次作业(SS电梯)

类图:

度量分析:

bug分析:这次作业bug较多,并且由于自己的理解不是很深刻,导致代码很爆炸。在中测时,又遇到了第一次作业进程无法停止问题,在强测时,是CPU超时并且实际运行时间超时。

三、心得体会

在这三次作业过程中,我对面向对象有了更深刻的了解,特别是对于多线程问题的学习,让我的见识更加深刻。但是我也遇到了很多问题,并且有些问题还是没有解决,希望通过之后的学习,能对与多线程的理解更加深刻。

BUAA-OO第二单元小结的更多相关文章

  1. OO第二单元小结

    OO第二单元小结 一.三次作业代码分析. 1.第一次作业 第一次作业是单部电梯的傻瓜调度,由于其过分傻瓜,所以第一次作业我只有两个类,一个main,一个电梯,main类负责不断从输入流中读取命令,如果 ...

  2. OO第二单元の小结

    第二单元(线程与电梯问题)总结博客 三次作业的设计策略 第一次:本次作业只有一部电梯,而且不用捎带.因此,我一共设计了两个线程:一个负责管理输入,一个负责电梯运行.同时,我将调度队列设置为单例模式,里 ...

  3. 电梯模拟系统——BUAA OO第二单元作业总结

    需求分析 官方需求 本次作业需要模拟一个多线程实时多电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出. 本次作业电梯系统具有的功能为:上下行, ...

  4. oo第二单元作业总结

    oo第二单元博客总结 在第一单元求导结束后,迎来了第二单元的多线程电梯的问题,在本单元前两次作业中个人主要应用两个线程,采用“生产者-消费者”模式和共享数据变量的方式解决问题.在第三次作业中加入多个电 ...

  5. OO第二单元优化博客

    OO第二单元优化博客 第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同. 总计一下lo ...

  6. 【OO学习】OO第二单元作业总结

    OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...

  7. OO第二单元多线程电梯总结

    OO第二单元多线程电梯总结 第一次作业 设计思路 Input为输入线程,负责不断读取请求并将读到的请求放入调度器中. Dispatcher为调度器,是Input线程和Elevator线程的共享对象,采 ...

  8. 电梯也能无为而治——oo第二单元作业总结

    oo第二单元作业总结 一.设计策略与质量分析 第一次作业 设计策略 在第一次作业之前,我首先确定了生产者--消费者模式的大体架构,即由输入线程(可与主线程合并)充当生产者,电梯线程充当消费者,二者不直 ...

  9. 2020北航OO第二单元总结

    2020北航OO第二单元总结 前言 本单元考察基于多线程的电梯调度问题,成功让我从一个多线程小白到了基本掌握了使用锁来控制线程安全的能力,收获颇多(充分体验了迷茫地de一个又一个死锁bug的痛苦). ...

  10. OO第二单元——多线程(电梯)

    OO第二单元--多线程(电梯) 综述 第二单元的三次联系作业都写电梯,要求逐步提高,对于多线程的掌握也进一步加深.本次作业全部都给出了输入输出文件,也就避免了正则表达式判断输入输出是否合法的问题. 第 ...

随机推荐

  1. python简单爬虫 使用pandas解析表格,不规则表格

    url = http://www.hnu.edu.cn/xyxk/xkzy/zylb.htm 部分表格如图: 部分html代码: <table class="MsoNormalTabl ...

  2. Android N 的开机启动流程概述

    原地址:https://blog.csdn.net/h655370/article/details/77727554 图片展示了Android的五层架构,从上到下依次是:应用层,应用框架层,库层,运行 ...

  3. 微信小程序上传图片

    话不多说,直接上码. <view class="section"> <!--放一张图片或按钮 点击时去选择图片--> <image class='ph ...

  4. Database First/Code First

  5. [git]入门-创建版本库

    转载整理自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256 ...

  6. hadoop2.6.0高可靠及yarn 高可靠搭建

    以前用hadoop2.2.0只搭建了hadoop的高可用,但在hadoop2.2.0中始终没有完成YARN HA的搭建,直接下载了hadoop最新稳定版本2.6.0完成了YARN HA及HADOOP ...

  7. MySQL父子节点查询

    MySQL父子结点递归查询 表结构: CREATE TABLE `agency` ( `id` ) NOT NULL COMMENT '编号', `name` ) NOT NULL COMMENT ' ...

  8. Leetcode 600 不含连续1的非负整数

    给定一个正整数 n,找出小于或等于 n 的非负整数中,其二进制表示不包含 连续的1 的个数. 例如: 输入: 5 输出: 5 解释: 下面是带有相应二进制表示的非负整数<= 5: 0 : 0 1 ...

  9. SAMTOOLS使用 SAM BAM文件处理

    [怪毛匠子 整理] samtools学习及使用范例,以及官方文档详解 #第一步:把sam文件转换成bam文件,我们得到map.bam文件 system"samtools view -bS m ...

  10. R语言 一套内容 从入门 到放弃

    [怪毛匠子整理] 1.下载 wget http://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.0.1.tar.gz 2.解压: tar -zxvf R-3.0. ...