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

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

  本次作业是我第一次接触多线程,建立了请求模拟器、调度器和电梯运行三种线程。请求模拟器负责在输入后识别有效请求;调度器在扫描有效请求后将新的请求加入请求队列,并扫描三部电梯的信息,最后遍历请求队列中的请求进行调度,并根据得到的信息进行请求状态和请求队列的更新;电梯运行线程则根据得到的信息进行运动,同时改编电梯信息。实现多线程功能中最大的挑战是实现共享数据的安全、避免冲突(一开始没有加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. Java基础---Java---IO流-----读取键盘录入、InputStreamReader、转换流、OutputStreamWriter、InputStreamReader

    字符流: FileReader FileWriter BufferedReader BufferedWriter 字节流: FileInputStream FileOutputStream Buffe ...

  2. FFmpeg示例程序合集-批量编译脚本

    此前做了一系列有关FFmpeg的示例程序,组成了<最简单的FFmpeg示例程序合集>,其中包含了如下项目:simplest ffmpeg player:                   ...

  3. (NO.00004)iOS实现打砖块游戏(十一):"一闪一闪亮晶晶,我们都是小星星"

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在一个基本的游戏逻辑已经搭建好了,但是感觉还是缺点什么呢? 蠢 ...

  4. Linux下使用gcc编程初体验

    近期刚刚放弃了Windows,投入了Ubuntu 的怀抱.今天就拿一个小小的案例来做一下C语言的编译和运行流程.额,顺便说一句.本文适合那些Linux新手,不适合老鸟哈. 看完本文可以学到什么? 程序 ...

  5. Struts2进阶(一)运行原理及搭建步骤

    Struts2进阶(一)运行原理 Struts2框架 Struts2框架搭建步骤 致力于web服务,不可避免的涉及到编程实现部分功能.考虑使用到SSH框架中的Struts2.本篇文章只为深入理解Str ...

  6. UNIX环境高级编程——信号基本概述和signal函数

    一.为了理解信号,先从我们最熟悉的场景说起:1. 用户输入命令,在Shell下启动一个前台进程.2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断.3. 如果CPU当前正在执行这个进程的代码,则 ...

  7. 今日成为CSDN认证专家

    认证时写的申请材料: 程序猿一枚毕业于南开工作于上海.喜欢读书,喜欢跑步,激情似火,心静如水. 喜欢编程,喜欢寻根问底各种技术,喜欢在各种新技术中汲取营养. 喜欢分享,因此以一些高质量的博文来回报各位 ...

  8. 使用dom4j技术对xml文档进行增删改练习(一)

    整个流程如下面代码所以,并对一些重要代码意义做出详细解释: import java.io.File; import java.io.FileOutputStream; import org.dom4j ...

  9. java工具类(三)之生成若干位随机数

    java 生成若干位随机数的问题 在一次编程的过程中偶然碰到一个小问题,就是需要生成一个4位数的随机数,如果是一个不到4位大的数字,前面可以加0来显示.因为要求最后是一个4位的整数,不带小数点.当时就 ...

  10. div+css基础教程

    本文存下来作为备忘. 第一节  了解div+css 一.什么是div+css div元素是html(超文本语言)中的一个元素,是标签,用来为html文档内大块(block-level)的内容提供结构和 ...