概述
刚刚过去的oo第二单元主要是来训练我们java多线程设计。
借助电梯这个载体,逐步深入,线程的信息交互,控制也随之复杂。
尽管,我本单元成绩不是很好看,但是,确实学到了不少东西。
下面,我就借助分析三次作业,来谈下我的收获。
作业分析
第一次作业
(1)任务分析
本次作业需要模拟一个多线程实时电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出。
本次作业电梯系统具有的功能为:上下行,开关门,每运行一层的时间为固定值,开关门的时间也为固定值。
电梯系统可以采用任意的调度策略,即上行还是下行,是否在某层开关门,都可自定义,只要保证在系统限制时间内将所有的乘客送至目的地即可。
电梯系统在某一层开关门时间内可以上下乘客,开关门的边界时间都可以上下乘客。
至于调度算法-简单FAFS(傻瓜调度即可)
(2)设计策略
请求模拟器作为一个线程,负责接受在线请求并负责将请求放入请求队列中。
电梯作为一个线程,从请求队列get到所需请求并模拟电梯行为
请求队列是请求模拟器和电梯线程的共享对象,负责完成线程通信,控制。
其实,第一次作业比较简单,只需要考虑以下几个问题
问题1电梯如何完成请求
先接到请求发出者,然后完成该请求。在第一次作业中,我们无需判断电梯运动方向,所以这个问题就比较简单了,只需要sleep盲目模拟即可
问题2电梯线程什么时候死亡?
请求模拟器没有更多请求产生 & 请求队列等待人数为0 & 电梯中没有人
问题3线程通信,控制
第一次作业,轮询无碍,至于同步问题,给请求队列的get() put()函数加锁即可
(3) 度量分析
代码规格