oo第八次作业--5,6,7次作业总结
一、多线程的设计
这三次作业的主要内容就是使用多线程并且解决多线程中出现的问题。而对于多线程我也有了自己的理解。首先明确的一点是单个CPU在同一时间只能处理一件事。那么,不管是多进程还是多线程,我们的CPU只是在其中不停地交换执行,只不过时间太短以至于用户感觉不到,这就是宏观上的并行,微观上的并行。我们的程序在启动的时候就会创建一个主线程,而我们可以在其中继续创建线程来完成我们的任务。
这样交替执行会带来线程不安全的问题。这样的情况有很多,常见的状态就是在A线程执行一个对共享资源的操作中,被B进程打断(CPU去执行了B进程),但此时,A进程的操作并没有结束,应该改变的某些值还没有改变,那么此时执行的B进程在对共享资源操作的时候必然会出现错误。
但是,多进程的使用是必然的,否则一些程序并没有任何实际价值。于是,有多种方法可以帮助我们实现代码的同步。Synchronized修饰符可以保证其内部的代码块是同步执行的,这个方法也是这三次作业中主要用到的方法。另外还有加锁机制和唤醒机制。
二、策略与设计
1)第五次作业:三部电梯的多线程设计

调度器的任务就是预先判断和分装。在电梯中执行的时候是以每一层为粒度,到一层后扫描一遍当前电梯的队列,执行在这一层的请求。主要涉及的线程是主线程,调度器线程和三个电梯线程。共享资源的冲突点在与三个共享队列在不同线程之间被访问时候的线程安全问题。于是,队列采用了vector类。扫描器使用的是timer。
2)第六次作业:ifttt文件监控

每一个监控任务有一个成员变量是当前的snapshot(原snapshot)在每隔一定时间后,进行新的snapshot的生成,与原来的snapshot进行比较,如果满足监控作业的要求,则输出。主要的问题在与写文件时候,因此采用每隔5s扫描一次的timer策略来完成。另外,此次作业采用了TestThread线程控制的测试方法,通过程序直接控制文件系统。
3)第七次作业 100辆出租车的调度

有主线程,扫描线程和调度器线程。通过设置成员变量的累计方式,控制单个出租车的状态。
三、度量分析
1)第五次作业:三部电梯的多线程设计


度量结果和前两次电梯作业的有一定的相似之处,因为调度器有继承,这一点可以从类图上看出来。新的调度器在重写的command_new方法上出现了超出标准的控制流和循环。其次,在电梯类中的remsame方法中,也是有很多控制流和循环。这个方法主要是用于判断并移除同质请求的,因为没有设置为方法,在程序中出现了三次,且判断过程也比较复杂,造成了电梯类内部冗余。
2)第六次作业:ifttt文件监控



主要的问题出现在比较快照的comp方法。在此方法中,需要比较四个监控作业的条件是否满足,需要比较的前提也都比较多,而且对detail.txt文件的输入才在这个方法中。其次就是在建立快照的run方法中,因为要实现将结果写入summary.txt文件中,需要控制流的参与。至于ele类的参数过多这一点是服务于detail.txt文件的输出。
3)第七次作业:100辆出租车的调度 

主要问题在pathlength方法中,此方法是用bfs来计算两点之间的最短距离,对四个方向的遍历需要较多的控制流,且打印路径的操作放在了此方法中,通过一个标志变量控制。
四、bug分析
1)在三部电梯的调度中,出现了一个较大的问题,我尝试了与前两次不同的实现方法,结果考虑不够周全,用错了一个变量,使计算时间的时候产生了累积效应,在电梯类的模拟运动方法中导致时间的计算有错误,于是影响到了程序对到达楼层时间的预判,是一个很大的失误。
2)在文件监控中,没有仔细注意重命名和文件路径移动时需要判断是否是新产生的文件,否则就会导致我删除一个文件却触发了重命名等监控器。
3)设计原则问题,在表示状态的时候用隐含信息的数字表示。
五、发现bug的策略
1)从小处着手,测试基本的功能。
2)造成公共资源的竞争情况,通过观察输出之间的逻辑关系,看是否有矛盾,不合理的情况。
3)大数据的压力测试
六、心得体会
经历了这几次作业,对线程安全问题的解决停留在同步各个方法的基础层面上,这样操作使得程序运行慢,有些失去了多线程的优势。应该尝试着缩小同步代码块的范围,提高多线程的效率。
对于有些设计原则的理解还比较浅薄,但是设计原则确实很考验程序员的功底。对于程序来说,仅仅实现功能是不够的,遵循设计原则可以很好地提高代码的复用性和可维护性。以后在设计时需要考虑这些原则,完成一个好的设计。
oo第八次作业--5,6,7次作业总结的更多相关文章
- oo第八次作业
oo第八次作业 第五次作业分析: 1.度量图: 2.类图: 第五次作业由于是第一次接触多线程,所以导致自己的经验不足,因此最终也没有完成作业,到最后任然不能实现三部电梯的有效调度,所以导致了这次作业的 ...
- OO第四次博客作业(第四单元作业及期末总结)
(注意:本文写作顺序与作业要求不完全一致,但涵盖了作业的所有要求) 一学期的BUAA特色OO课程结束了. PART 1 我想先写我这一学期的感想 从第一单元满怀期待地写完多项式求值到最后看着60分不 ...
- OO第四次作业-对前三次作业总结
第一次作业由于直接没怎么学过java,全靠一星期速成,前几天看了java的语法,但是因为光看没有打代码,学习效果并不是特别好.由面向过程转向面向对象,不是特别清楚该怎么办,虽然写的是两个类,但实际上是 ...
- SQL Server代理(6/12):作业里的工作流——深入作业步骤
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这里系列的前几篇文章所见,SQL ...
- 南京邮电大学java程序设计作业在线编程第二次作业
王利国的"Java语言程序设计第2次作业(2018)"详细 作业结果详细 总分:100 选择题得分:60 1. 表达式9==8&&3<7的运算结果是( ) ...
- 《团队作业》五小福团队作业--UNO-- LandingDay--降落
<团队作业>五小福团队作业--UNO-- LandingDay--降落 写在前面 几周的飞行之后,降落之日也如期而至了.在2018年12月19日我们顺利地完成了项目的总结汇报.但是,短暂的 ...
- 经典MapReduce作业和Yarn上MapReduce作业运行机制
一.经典MapReduce的作业运行机制 如下图是经典MapReduce作业的工作原理: 1.1 经典MapReduce作业的实体 经典MapReduce作业运行过程包含的实体: 客户端,提交MapR ...
- 【BUAA 软工博客作业】个人博客作业
项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:热身作业,阅读并撰写博客 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 阅读教材, ...
- 【Hadoop代码笔记】Hadoop作业提交之JobTracker接收作业提交
一.概要描述 在上一篇博文中主要描述了JobTracker接收作业的几个服务(或功能)模块的初始化过程.本节将介绍这些服务(或功能)是如何接收到提交的job.本来作业的初始化也可以在本节内描述,但是涉 ...
随机推荐
- JFinal文件下载及设置路径
一:利用超链接 <a href="/download/a.docx">download</a> 二:java代码 1.页面 <a href=" ...
- no persistent volumes available for this claim and no storage class is set FailedBinding -- nfs --存储
添加PV标签oc label pv registrypv disktype=registry oc get pv --show-labels NAME CAPACITY ACCESSMODES REC ...
- css3 学习图谱
摘要 最近看了一篇文章,建立最近的知识体系,对于工作了几年的大牛需要,但对学生学习同样也需要,我试着做了自己的css知识总图,类似目录,引导我的学习路线. 3-28日总结 根据该图谱,我学习得更有方向 ...
- 纯CSS + 媒体查询实现网页导航特效
纯css+媒体查询实现网页导航特效 附上效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html lang="en"> <hea ...
- UITableViewCell的父视图
最近版本测试阶段,发现一个奇怪的问题,以前在A测试机上出现的崩溃bug,解决后今天在B测试机上又出现了,在B上解决完之后,返回到设备A上发现又不行了.最后调试发现是测试设备系统版本不同导致的,A设备是 ...
- PHP操作xml学习笔记之增删改查(1)—增加
xml文件 <?xml version="1.0" encoding="utf-8"?><班级> <学生> ...
- 20155214 2016-2017-2 《Java程序设计》第10周学习总结
学号 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 掌握Java Socket编程 理解混合密码系统 掌握Java 密码技术相关API的使用 教材学习中的 ...
- vba 语法
VBA语言基础 第一节 标识符 一.定义 标识符是一种标识变量.常量.过程.函数.类等语言构成单位的符号,利用它可以完成对变量.常量.过程.函数.类等的引用. 二.命名规则 1) 字母打头,由字母.数 ...
- 洛谷 P1350 车的放置
洛谷 P1350 车的放置 题目描述 有下面这样的一个网格棋盘,a,b,c,d表示了对应边长度,也就是对应格子数. 当a=b=c=d=2时,对应下面这样一个棋盘 要在这个棋盘上放K个相互不攻击的车,也 ...
- BZOJ2539 Spoj 10707 Count on a tree II
题面 题解 因为这道题目我也不太会做,所以借鉴了一下大佬heyujun的博客 如果不强制在线,这道题目是树上莫队练手题 我们知道莫队是离线的,但是万一强制在线就凉凉了 于是我们就需要一些操作:树分块 ...