272
社区成员




第一次作业
调度器直接向线程添加乘客,无需考虑乘客后续的换乘问题。
锁的设置:直接在线程方法中添加synchronized关键字即可
第二次作业
锁的设置:对于公共享有的乘客池,在对其进行读取和修改时要先获取实例锁,保证读写数据的正确
第三次作业
锁的设置:对于电梯线程的状态等一系列不同线程都需要获取的数据,使用synchronized关键字嵌套来保证获取顺序和防止死锁问题,但是目前存在可能会导致死锁以及完成sche和update请求效率低下的问题
最后的架构设计:
遇到的bug:
1.死锁,第三次作业中一开始遇到了大量的死锁问题,我的解决方法是规范锁的获取顺序,确保不会出现同时拥有锁又要对方锁的情况。
2.乘客多次进入电梯,这是因为对乘客状态修改没有同步导致的,解决方法就是添加了锁,保证同时只有一个线程对一个乘客状态进行修改。
3.最后一个即将结束的电梯陷入等待,而负责将其唤醒并结束的进程已经结束了,导致rtle的错误,解决方法是让每个线程进入等待前可以先判断是否可以直接结束。
心得体会:
多线程最重要的是处理好共享数据的读写问题和对于线程的唤醒和等待问题,显然我在这方面仍然有很多的问题还需要解决,在对线程获取锁的安排上需要提前规划好,才能让多线程程序正确高效运行