oo第二单元作业总结

第一次作业:

      第一次作业较为简单,并没有涉及捎带策略,因此在涉及的过程中并没有使用调度器对电梯运行进行调度。因此在涉及的过程中,除了main类以外我设计了四个类,queue负责输入以及对于输入内容的储存,Elevator类为电梯类,在接到来自queue的任务后处理任务,对人进行接送。trans类储存queue类读入的任务并将任务传入。因为这次作业中各个线程之间的耦合度不高,所以对于线程上锁后不会发生冲突。第一次作业类的耦合度不高,主要为了熟悉多线程程序的过程。

 

第二次作业:

第二次作业和第一次作业的重要区别是加入了捎带功能,因此在第一次作业中将任务直接传送给电梯并进行简单处理的方法完全失效。相比之下,这次作业我需要做出的改进是在程序中加入一个调度器类,这个类通过判断传入指令之间是否能够进行捎带,从而制定电梯运动的策略,并在elevator中将这些指令信息转变为电梯的实际运动状态,并将结果输出。

相比于第一次作业,第二次作业中加入了调度器(Scheduler)类,并且线程之间的耦合度较高,因此线程上锁后遇到的冲突情况也较为严重,对我这次作业的完成过程造成了很大的困难。

 

第三次作业

第三次作业在第二次作业的基础上变成了任选调度策略的多部电梯,由于完成作业的过程中优先使用捎带策略,因此我做出的改动是在第二次作业的基础上,在调度器Scheduler类中,加入了对于处理请求的电梯的选择的方式,在电梯可容纳的最大人数以及电梯的可运行楼层方面,对于请求进行了筛选,同时,借用第二次作业中完成的捎带策略,在单独某一部电梯收到的请求中,通过捎带的方式完成请求。

这次作业主要对Scheduler类进行改动。同时,由于电梯不能在每一层都开关门,我在elevator类中,也对电梯的开关门状态进行了些许改动。

 

心得体会:

这三次作业由浅入深的让我们熟悉了对于多线程编程方式的使用以及线程安全的设计和优化方面。由于线程之间的耦合度不用,利用synchronized方式对线程进行上锁的同时,可能产生冲突,这是我在使用多线程过程中会出现的问题。在这几次作业的运行过程中,我没有对自己的调度算法进行过多优化,由于自己对于多线程了解的不够透彻,因此在编程过程中的线程安全性方面遇到了很多困难。

对于多线程编程方式的使用以及线程安全的维护和程序算法的优化还是以后需要多加练习的问题。

你可能感兴趣的:(oo第二单元作业总结)