第二单元总结

第二单元总结

1.第一次作业

​ 在第一次作业中,我采用的是一个等待队列配对一个电梯的方式,设置了电梯线程和输入线程。

1.1 同步块的设置和锁的选择

​ 对于锁的选择上,为了防止莫名其妙的问题,我直接采用的是方法加synchronized锁(并且一直用到了作业三),显然这种方式会拖慢效率,因为可能只访问一个类中的某一个元素,但是却把整个类都锁住了,但是这种方法让我在电梯队列的线程安全上没遇到问题。

​ 对于同步块的设置,输入类和电梯类会共享这个电梯的等待队列,由于我在等待队列中直接采用方法上锁的方式,输入类中并不需要额外再加同步块。但是,为了使线程安全结束,我在每个电梯的run方法中对waitqueue上锁,判断waitqueue是否为空,并且在队列类中设置End信号判断输入结束,当waitqueue为空且End=ture后,电梯进程结束;否则,如果waitqueue为空,这waitqueue.wait(),在等待队列类中的addRequeue和setEnd方法中设置notifyAll,使得电梯线程可以被唤醒。当输入结束且队列为空时,可以正常结束电梯线程。

1.2 调度器设计

​ 第一次作业的调度器,我采用的是一部电梯一个调度器的策略,调度器并没有单独开辟线程,并且使用look策略寻找去向,只有电梯这一个线程。电梯队列和等待队列都放在了调度器中。电梯类中只有简单的run()方法,而调度器用来判断进出人并且完成进出人的操作。对于交互上,由于第一次只是一个电梯,因此只在进出人的问题上会使用调度器中的方法。

1.3 UML类图

1.4 UML协作图

2. 第二次作业

2.1 同步块的设置和锁的选择

​ 这次同步块的设置和锁的选择相比于第一次基本没有改动。

2.2 调度器的设计

​ 这次作业的调度器我采用的是一栋楼一个调度器的方式,把电梯乘客队列放在了电梯类中,而调度器管理一栋楼的等待乘客。调度器的策略上,纵向电梯采用look+自由竞争策略,横向电梯采用基准策略+自由竞争。除去横向电梯和纵向电梯在查找方式上的不同,其两种电梯类和等待队列并没有什么别的区别,其实可以把他们抽象出来会更好些。

2.3 UML类图

2.4 UML协作图

3.第三次作业

3.1 同步块的设置和锁的选择

​ 此次作业相比与第二次作业,大的改动主要在Schedule类上,刚开始时,我在Schedule中加入了换乘队列,在输入时对需求进行拆分。同时,我在判断输入结束处,加上了一个换乘队列的锁,当换乘队列为空且输入结束时,对每个等待队列setEnd。但是我的这种方法出现了死锁。于是我改为采用换乘队列单独建类的方法。Schedule类中的锁的设置不变。

3.2 调度器的设计

​ 第三次作业的调度器和第二次作业的调度器相比没有区别。

3.3 UML类图

3.4 UML协作图

4.分析bug

这个单元,我在第五次作业和第七次作业中均被发现了bug。

第五次作业的bug主要是匆忙改变策略引起的,因为第五次作业我较快完成,对策略的考虑只是简单使用基准策略,并且通过大量测试没有发现什么问题。在提交截止前,我认识到look策略比较快,因此我把策略改成了look,由于改动范围比较小,因此再做的测试并没有很全面,于是出现了向下搜索的顺序颠倒的问题。修复方法就是把顺序颠倒回来就好了。还有一个就是输出线程的安全问题,之前没有认真看大群,没有认识到输出也有线程安全问题(下次不敢了)。修复方法:对设置输出类并加锁。

第七次作业出现了一个死锁问题在作业3的调度器中我进行了解释。

5.发现别人程序bug所采用的策略

策略:看代码+盲测

我认真地查看了房间内同学的代码,主要是看我认为会错的地方,但是并没有什么收获。

这个单元我做了一个测评机(在第五次作业测试不充分后痛定思痛)部分数据是通过测评机随机生成后对房间内的人进行测试。

测评机的数据比较随机,覆盖性不一定好,我也通过手搓边界数据对房间内的测评机进行测试。

有效性:虽然使用了三种方法,但是这三种方法在我三次作业中最好地那次中并没有测出同学的bug。(总得来说,我的测试能力还需要提高)

线程安全相关的问题的发现:通过自己的测评机,运用状态转移和时间递增判断。

与第一单元测试策略的差异之处:这次作业由于数据需要比较多,且比较大。于是我自己写了测评机(这也是我第一次写测评机),通过测评机进行测试。

6.心得体会

这次作业,我深深认识到了做测试的重要性,第一次作业因为测试不充分导致的问题让我消沉了好几天,但同时这件事也让我开始学着写测评机,锻炼了我的能力。虽然第一次写的测评机可能还不是很好,但是已经可以基本实现自动化测试了。我希望之后的作业中我能继续锻炼自己的这个能力(充分测试!!!)

这次多线程的电梯作业,让我对多线程有了更多的了解,从完全不懂到最后写出一个较好的花式电梯确实让人成就满满。对于线程安全和死锁的一些失误和找bug的过程,也让我对这两个问题有了更深地了解。希望接下来能更好吧...多做测试。

posted @ 2022-04-28 20:25  XinTai。  阅读(27)  评论(1编辑  收藏  举报