OO第五次做业-多线程电梯安全
一、做业分析
多线程
此次做业和前两次不一样之处在于多线程的使用,也由此引入了线程的安全性问题,给此次做业形成了必定的麻烦。因为采用多线程,就不能用前两次的方式,先将请求所有输入再进行相关计算,须要一边运行一边计算,所以舍弃了前两次的架构,基本上从新开始规划此次的做业。采用了模拟时间的方式和生产者消费者的模型,构造公有对象请求队列做为托盘,调度器和请求输入线程分别做为消费者和生产者。架构
二、做业类图测试
三、度量分析spa
果真Scheduler类和电梯类的方法仍是须要梳理一下,if等逻辑嵌套有点多,致使复杂度太高。线程
四、UML Sequence设计
五、Bug分析3d
此次出现了两个bug。一是由于有几段判断的代码差很少,直接复制过来结果忘了修改部分变量名,致使判断出了问题;二是主指令结束时捎带的临界条件忘记判断了,致使额外捎带了指令。对象
这两个bug修改起来都是小问题,也就是一行代码的事情,在写的时候仍是忽略了这些细节。也是由于有些懈怠了,清明放假出去浪了一圈,回来的时候匆匆忙忙地赶完了做业。之后仍是要注意。blog
OO第六次做业-监控文件
一、做业分析
此次做业再也不是电梯(从这之后坐电梯不再担忧了~),而是变成了对目录文件的监控。不过也由于这样,此次做业对线程安全性的要求变高了,不像第五次的多线程电梯那样没有多少须要注意安全性问题的。
此次一共有4个触发器3个任务,我按照一个触发器搭配一个任务的方式开线程,所以最多会有3*4*10=120个线程。但也由于这一点,处理recover和record的时候因为JVM处理多线程的方式会出现一些合理的状况。根据指导书的要求,构造了SafeFile这一个文件安全类,来使Java自带的不安全的File类变得安全。
此次的做业思考难度并不大,不像电梯同样考虑不少状况,只须要定时扫描就行了,惟一须要注意的就是线程的安全问题,只要这一方面处理好了就基本不会出现问题了。
二、做业类图
三、度量分析
整体来看复杂度还好,仍是for、if、switch等等的嵌套太多,若是把这些判断拆成一个个方法又感受没什么必要,纠结。
四、UML Sequence
五、Bug分析
此次被发现了两个bug。一是因为此次做业不测格式便对输入放宽了要求,没有用正则,也忘了try-catch,致使输入不合规范的时候会crash,果真仍是不能放松警戒啊;二是线程安全性问题,因为SafeFile类建立对象时,不管以前这个路径的文件的对象有没有被建立过,我都会直接建立新的对象。这就致使了我SafeFile中的同步在测试线程中根本没有用,由于测试线程中的SafeFile对象彻底就是新的,还有就是在扫描过程当中锁的释放时机没有把控好,在整个扫描过程当中已经扫描过的文件不该该释放锁,否则扫描过的文件在扫描过程当中发生改变会出现问题。
虽然被找到了bug,但仍是以为本身并无损失什么,毕竟从测试者那里学到了处理线程安全的知识,就至关于用分数换知识了,不亏。
OO第七次做业-出租车
一、做业分析
此次是出租车这一大型连续做业的开端(之后不再坐出租车了),并且不像电梯同样从单线程过分,而是直接由多线程开始,不过有了前两次的基础,再加上本次是出租车的第一次做业,难度不是特别大。
我是按照请求寻找出租车来进行设计的,每个请求开一个线程,寻找可以抢单的出租车,同时每辆出租车也是一个线程,进行相关的移动。所以出租车对象是公有对象,须要对其上锁防止请求线程和出租车线程同时对出租车对象进行操做。请求线程运行3s以后就从抢单的出租车列表里面筛选出最合适的出租车,并将该请求分配出去,在这个过程当中就须要锁住出租车对象,防止其余请求线程对出租车的状态进行改变。
二、做业类图
三、度量分析
观察了一下,复杂度高的那几个方法是本身写的BFS,里面有try,if,while,for,switch的嵌套,所以致使了复杂度高,但一样的既然是BFS,感受没有必要将BFS再进行拆分,所以就这样保留了下来。
至于TaxiScheduler类中的Schedule方法,确实能够进行拆分。一开始是将其中的部分代码放在了一个方法中,但后来进行了修改,便没有再单独开一个方法了.....仍是由于懒。
四、UML Sequence
五、Bug分析
此次却是没有发现什么Bug。本身测试本身的代码的时候曾发现了一个Bug,会致使输出多输出一些东西,后来发现是wait()和sleep()使用错误的缘由,原本不该该释放锁的地方我却用wait()释放了锁,改为sleep()以后就消除了这个bug。
心得体会
不得不说,OO带给个人压力比计组还大,让人心力憔悴,筋疲力竭。但在这种高压的环境下,也确实是学到了好多的知识,只能说是有利有弊吧。听说以后的OO的做业的难度没有之前那么大了,但我总感受是在欺骗人,更况且第九周开始周三就有金工实习了,一想起来就心累。虽然累,但当本身交上去的做业没有被发现bug的时候以为累的也是有价值的。就这样且行且珍惜这段OO的时光吧。