第五次OO作业——多线程电梯
从度量图可以看出,这一次的电梯程序相较前两次有所改善,但仍存在爆红的问题。通常爆红可以用将一个方法拆分成多个方法来解决,而这次爆红的位置是线程的RUN方法,在设计时我考虑到如果将其中的代码单独拿出来,将会产生大量不会被其他类调用的方法,在其他类调用它的时候容易产生混淆。但是如果不拆开又会使得RUN方法难以维护,所以下次也许可以采取一些折中的方法。
这次的多线程基本不存在线程安全问题,因为指令是由schedule统一分配的,不存在不同线程访问同一成员的问题。可能出现问题的地方在于线程具有不确定性,某些设计缺陷可能导致信息传递晚于预期时间。
这次我所测的代码并未按照实际时间运行,也使得我无法进行更进一步的测试。
第六次OO作业——文件监控
这次的度量图中除了同样反映出run方法的问题,递归也同样出现了问题。这确实让我觉得有些无所适从,我不是很清楚这是递归的通病还是我仍应该拆得更散一些。
按照我的设计,这次的线程安全只会出现在写文件中,其他的部分依旧没有出现不同线程修改同一个变量的情况。但同样存在由于线程的不确定性导致的时间问题。
这次测试程序的时候我仅仅是按照所有的任务组合逐一测试的。感觉这次大部分的特殊情况都已经被限制了,同时一些情况又很难去测试,所以除了直接阅读代码寻找一些特殊的漏洞,也只能测这些通用情况了。
第七次OO作业——出租车
这次程序除了之前提到过的run方法和递归的问题,对地图的处理中也同样爆红了。这段代码确实比较复杂,我也没有想到很好地处理方式。
总结
线程安全我认为本质就是不同线程修改同一变量时会出现问题,事实上这三次程序就我的设计而言都没怎么需要考虑这个问题。
这几次代码写下来,我觉得我最需要改变的就是我要从写只有我能看得懂的代码,变为别人也能轻易读懂的代码,变为容易维护的代码,尽管这会让我在公测时处于不利的情况。