其他分享
首页 > 其他分享> > OO第二单元总结

OO第二单元总结

作者:互联网

OO第二单元总结

一、单元重点

1.1 多线程的概念和理解

多线程,顾名思义,就是在一个程序运行时有多个同时运行的线程,它是比进程更加细化的概念,主要的研究对象就是我们的共享对象,针对研究对象进行各个线程间的合作协同,一般情况下能较大程度提升程序性能。

1.2 JAVA多线程

1.3 同步块和锁

二、调度器设计

在整个的三个作业中,说实话在前两次作业中都不算真正的有调度器,顶多算是一个分发器,职能和作用是去将请求合理的“分发”给每一个电梯等待序列,而到了第三次作业中,由于要对于请求进行识别和分类,将要进行换乘的“请求”根据现在所在的楼层和楼座调度到相应的电梯请求队列。

而实现电梯运行的方向和是否开关门的请求和操作实在电梯内部实现的,整体是采用一种LOOK策略,其实在最开始的第一次作业中采用的是一种SSTF策略,本来也没啥,也是一种可行的调度方式,但是在第一次互测阶段有同学认真读了我的代码,看出来我的SSTF策略,然后针对性的数据,卡出来了RTLE,然后我修复BUG的时候发现这些的数据就是过不去,然后自己分析后发现是自己的策略在处理这个数据就是不行,会被卡。然后采取将自己的调度策略改成LOOK策略,很符合我们日常生活中的电梯调度,之后性能上就没有出现过很严重的问题(虽然强测中还是会出现一些85的点)。

在楼座和楼层的内部都是采用的自由竞争,本来看指导书的分配请求建议还想着如何去实现一个较为完善的分配方式和策略,但是看了学长和学姐的相关博客,加上又和同学进行了一些讨论,毅然决然的使用了自由竞争策略,也确实没有产生什么很严重的问题。

然后具体线程间的交互是InputThread类来添加我们的电梯线程和调度器线程,还有的交互就是通过两个生产者-消费者模式来进行交互。一个是输入线程和调度器线程之间,一个是调度器和电梯线程之间。

三、结合线程协同的架构模式,分析和总结自己

架构模式:

这个架构模式可以说三次作业都是一种生产者-消费者模式。三次作业变化较小,一定程度上可以说明程序的扩展性可以。一共是输入线程、调度器(分发器)线程和电梯线程。然后组成两个生产者-消费者模式。一个是以输入线程为生产者,调度器作为消费者,而其中用一个共享的请求队列作为中间的“托盘”。然后调度器转过来在作为一个新的生产者,将指令进行识别和一定的处理后放入每个楼座楼层的新待处理请求队列的“托盘”,每个楼座楼层的电梯用自由竞争的方式来“消费”这些请求,并且以LOOK的策略处理请求。这就是我的电梯作业一个整体的架构和运行处理逻辑。

只不过在第三次作业中我们要处理带有换乘需求的请求,所以增加了流水线模式,不过说实话我认为我并没有真正的实现了流水线,只不过是在课程组一些对于用户请求近乎严苛的要求下完成的一种可以处理固定换乘方式的电梯。调度器具体的实现方式就是根据这个请求所在的楼层和楼座识别出来这个请求在处理的第几个阶段,然后放进到相应的待处理请求队列就行。

作业实现:

UNL类图:

前面两次作业的家都实现基本是一致的,生产者-消费者模式。下面是第二次作业的类图。

最后一次作业中我们电梯会在最后进行一个请求是否到达想去的终点的判断,如果不是,电梯会成为一个新的“输入线程”,向调度器重新“投入”这个请求。下面是UML类图。

UML协作图:

协作关系三次作业基本是一样的,主要的不同就是我们第三次多了一个电梯作为一个可能的生产者再次和调度器协作。下面以第三次作业为例:

四、作业问题

五、心得体会

标签:OO,总结,加锁,请求,作业,调度,电梯,线程,单元
来源: https://www.cnblogs.com/qiaoaiku44/p/16221242.html