多线程协同与同步控制总结

  • 第五次作业-多线程电梯

  本次作业是我第一次接触多线程,建立了请求模拟器、调度器和电梯运行三种线程。请求模拟器负责在输入后识别有效请求;调度器在扫描有效请求后将新的请求加入请求队列,并扫描三部电梯的信息,最后遍历请求队列中的请求进行调度,并根据得到的信息进行请求状态和请求队列的更新;电梯运行线程则根据得到的信息进行运动,同时改编电梯信息。实现多线程功能中最大的挑战是实现共享数据的安全、避免冲突(一开始没有加synchronized修饰符导致出现很多bug),因此在与同学讨论后,采用了将所有方法都加上synchronized修饰符的方法来避免数据冲突(当然这样也一定会导致一些bug)。

  • 第六次作业-IFTTT

第六次作业是文件及文件夹的监控与管理。遵循“将每一个新的监控变成一个新的线程”的原则,很多个线程不断的扫描,如果有满足监控条件的触发情况,则完成触发,同时更新快照以便下一次判断。考虑到file的不安全性,设置线程安全的safefile类,并对于所有方法都上锁。

  • 第七次作业-出租车系统

本次作业的线程主要分为三类:出租车、调度器、输入。首先是100个出租车线程,考虑到安全问题,对于其中的快照信息进行加锁。其次是调度器线程,通过扫描得到出租车的快照,然后遍历请求对列,判断出租车是否符合规定的信息,得到最后的信息后则更新出租车及队列的状态。输入线程则循环接受输入,检查有效与同质信息并输出指定信息。队列及请求类的所有方法都上锁以确保线程安全。

度量分析 (由于eclipse原因,暂时无法度量分析)

  • 第一次作业·多线程电梯

  类图:

  

  自我点评:

  第二次作业·IFTTT

  类图:

  

  第三次作业·出租车系统

  类图:

  

  

BUG分析

  • 第一次作业·多线程电梯

  公测&互测:对方未进行测试

  调试:由于是第一次写多线程,所以导致没有思路,迟迟没有开工,一开始忘记加锁导致出现许多难以预料的问题。最终对线程进行加锁处理,实现了信息的相互传递,才得以顺利完成。

  测试程序:本次作业分配到的作业为无效作业,输入任何请求都显示输出格式错误。

  • 第二次作业·IFTTT

  公测:关于目录下的一系列测试没有通过

互测:无

分析:本次作业是自己对于指导书的理解不够透彻,在关于目录的一些操作都会报错而不是按照要求进行移动。

  测试程序:本次测试任务有非常多的bug,对于一般的请求都会报错和crash,难以进行测试。但对于某些简单样例能够通过。

  • 第三次作业·出租车系统

  公测:全部通过

  互测:对于输入的不合理请求没能报错,反而导致了crash。最终分析是由于正则表达式没有写好的原因(暴打自己狗头一万遍)。

  调试:测试太麻烦,没有进行很好的测试,所以才会出现低级错误。据可爱的助教说,我的程序出现了gui会跳的问题,所以之后应该会进行改动。

  测试程序:本次测试任务总体来说还算可以,但是对于出租车的抢单没有处理好,导致在多个出租车抢单时没能选择信用值最高的那个,而且也没有输出位置信息。

心得体会

这三次作业的难度比起前几次可谓难度上了一层楼,前几次大概还在“1+1=2”,这几次就到了求导,写第五次作业时完全没有思路,急的嘴角都攒起了泡,不过最后还是有惊无险,同舍友一起渡劫。由于对方没有给我公测和互测,对于我第五次作业的bug也没有一个很好的认识。但就自己之后的调试和反思,第五次作业程序代码太过冗杂而无法修改,形成了牵一发而动全身的状态,这是自己之前没有写好导致的。第六次作业是自己认为最难的一次作业,指导书的难以理解度已经超出了我的想象,所以也导致了不理解下的很多bug。

纵观这三次作业,难就难在不好调试,第五次作业还好,输出信息一目了然,但第六次作业对于深度和广度的遍历实在是太痛苦了,本人又没有扎实的c语言功底,只能自己手动构建文件夹,真是不堪回首的一段记忆……至于第七次作业那就更是玄学了,出租车肆意乱跑,也就胡乱调试了一下……

黑眼圈已经重到媲美眼影的程度,还好有假期能休息一下23333好好阅读指导书,阅读指导书的日子让我不由想起了传说中的甲方的种种要求啊!总体来说,苟活下来就是胜利。

oo第二次博客作业的更多相关文章

  1. OO第二次博客作业——电梯调度

    OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...

  2. OO第二次博客作业—17373247

    OO第二次博客作业 零.写在前面 OO第二单元宣告结束,在这个单元里自己算是真正对面向对象编程产生了比较深刻的理解,也认识到了一个合理的架构为编程带来的极大的便利. (挂三次评测分数 看出得分接近等差 ...

  3. OO第二次博客作业(第二单元总结)

    在我开始写这次博客作业的时候,窗外响起了希望之花,由此联想到乘坐自己写的电梯FROM-3-TO--1下楼洗澡,然后······ 开个玩笑,这么辣鸡的电梯肯定不会投入实际使用的,何况只是一次作业.还是从 ...

  4. OO第二次博客作业--第二单元总结

    第一次作业 1. 设计策略 第一次作业,一共三个线程,主线程.输入线程和电梯线程,有一个共享对象--调度器(队列). 调度的策略大多集中到了电梯里,调度器反而只剩下一个队列. 2. 基于度量的分析 类 ...

  5. [BUAA OO]第二次博客作业

    第五次作业 这次作业是电梯系列作业的终极版,要求是使用多线程实现三部电梯的运行.这次作业的难点在于第一次运用多线程技术,对于线程中的行为并不了解,以及电梯功能的实现(如果之前作业采取的是扫描指令队列预 ...

  6. Java第二次博客作业

    Java第二次博客作业 时间过的很快啊,在不知不觉中这门课程的学习也就快要过去一半了,现在就来总结一下在这个第二个月的学习当中存在的问题以及得到的心得. 1.前言 第四次题目集和第五次题目集给我的感觉 ...

  7. 第二周博客作业 <西北师范大学| 周安伟>

    一,本周助教小结 逐步开始适应助教工作,对学生发布的博客进行点评,查看学生对软件工程前期的准备情况. 二,助教本人博客 https://home.cnblogs.com/u/zaw-315/ 三,学生 ...

  8. C语言第二次博客作业---分支结构

    一,PTA实验作业 题目1.计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.实验代码 double x,result; scanf("%lf",&x); if( ...

  9. C语言第二次博客作业——分支结构

    一.PTA实验作业 题目1:计算分段函数 1.实验代码 #include<stdio.h> #include<math.h> int main(void) { double x ...

随机推荐

  1. 剑指Offer——分治算法

    剑指Offer--分治算法 基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更 ...

  2. JAVA之旅(二十九)——文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习

    JAVA之旅(二十九)--文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习 我们继续学习File 一.文件递归 我们可以来实现 ...

  3. linux下JAVA开发的环境配置

    1.去http: //java.sun.com/j2se/1.4.2/download.html 下载一个Linux Platform的JDK,建议下载RPM自解压格式的(RPM in self-ex ...

  4. EBS DBA指南笔记(二)

    第三章 监控和诊断   本章涵盖以下几个主题:监测的方法,数据库的监测,apache的监测,forms的监测,并发管理器的监测,服务器的监测,网络的监测,其它的一些监测和诊断方法. 1.监测的方法:主 ...

  5. android的PackageManagerService详解

    PackageManagerService主要是一个包的管理服务,在开机的时候会解析以前保存的一些安装包的相关数据,android运行过程中新安装的apk也会保存到PackageManagerServ ...

  6. javascript之数组对象与数组常用方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. [Ext.Net]TreePanel 异步加载数据

    异步加载数据指的是页面加载的时候只显示根目录,点击根目录再去加载其子目录. 下面就来介绍下这种异步加载的树结构要怎么实现 现将例子的图 QQ图片20131225134353.jpg (12.1 KB, ...

  8. Java 与 C++ 不一样的地方(持续更新中...)

    本文仅以记录 Java 与 C++ 不同之处,以备随时查询. Java 程序运行机制 Java 是一门编译解释型的语言,即它在运行的过程中既需要编译也需要解释.如下图表示的是 Java 程序运行机制: ...

  9. Ext.Net 1.x_Ext.Net.GridPanel之Access数据库分页显示

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  10. 对C语言中递归算法的分析

    C通过运行时堆栈支持递归函数的实现.递归函数就是直接或间接调用自身的函数.     许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的<C语言程序设计> ...