301
社区成员
发帖
与我相关
我的任务
分享本次作业中主要由以下几个类构成


本次作业中,我对代码进行了重构,形成了新的架构
作业中有以下类


本次作业大体延续第二次作业的架构,但为了解决双轿厢问题做了一定的调整
作业中有如下类



总体上 Elevator 类 ,ElevatorThread 类,Strategy 类,InputThread 类,WatingRequest 类,Arranger/WholeWaitingRequest 类,RequestBuffer 是比较稳定的,这一部分这是电梯的基础,所有的电梯活动均基于他们而行。其他类用于处理不同的电梯类型的相关问题,比如 Occupied 和 Shaft 是用于解决双轿厢电梯的问题而设计的类。
在整个 Unit 的中,由于我没有很好的考虑扩展性的问题,所以对架构进行调成,对代码重构,但在第二次作业后就确定的架构其核心代码可以较稳定的延续。
在本 Unit 中,我使用的均为 synchronized 锁,通过不让多个线程访问同一对象的方法来解决多线程之间同步的问题。其中一个运用为使用同步锁完成 Occupied 类,使得
可以完成一个线程完全的 Occupied 类,此时通过使用 Occupied 类可以保证双轿厢电梯不会相撞。
此外电梯是同时被电梯线程和输入线程控制的,需要使用同步锁以保证电梯信息的正确性。
在本地 Unit 中遇到的 bug 大多数都是关于同步锁的 bug,由于没有较好的设计锁的使用导致死锁的 bug。
对于死锁的问题,又分为可以复现的情况和不能复现的情况。
对于可以复现的情况,我采取将程序中间打印信息的方法来观察是哪一个部分死锁了,找到了死锁的位置之后再对原因分析并改良。
对于难以复现的情况,这种情况我并没有找到一个很好的方法来解决问题,只能通过对所有锁的结构和位置进行分析,考虑为什么会出现死锁的问题。
整体来说死锁的问题没有很好的 debug 手段,只能尽量在设计的时候考虑仔细,以求完成代码之时就没有问题或较少问题。
本次 Unit 中主要的问题是多线程的问题,为保证多线程的线程安全会使用锁的结构,但此时又会产生死锁的问题,所以为思维和设计的缜密提出了很高的要求,也让我了解到了多线程程序设计的困难之处。层次化多线程设计中的一种思路,通过层次化的设计,可以方便思考多线程中容易出现的各种问题,让我学习到了如何去设计一个多线程的程序。整个 Unit 使我从零基础到对多线程设计有了一定的了解和认知,虽仍不能很好写出优秀的多线程程序,但是也有了了解,能够逐步完成多线程程序设计