2024面向对象设计与构造-第二单元总结

车静允-79066001 2024-04-16 19:07:41

同步块设置和锁选择

1. 同步块的目的:

  • 控制对共享资源(例如:请求队列,电梯状态)的访问,防止并发问题。
  • 通过线程间同步,确保执行顺序的可预测性和一致性。

2. 同步块的设置

  • 在Java中,使用synchronized关键字获取对象的监视器锁,此期间阻止其他线程并发访问。
  • 例:在添加或删除请求时,设置请求队列对象的同步块,以维持数据的一致性。

3. 锁的选择:

  • 根据共享资源的特性和线程间的交互特性选择锁机制。
  • 重量级锁(例如:ReentrantLock)适用于需要更细致控制的情况,但可能导致性能下降。
  • 轻量级锁(例如:synchronized)适合简单操作,是Java内部管理的有效方式。

锁和同步块中的处理语句之间的关系

 

  • 锁和同步块确保在多线程环境中,代码的特定部分一次只能由一个线程执行。
  • 处理语句包含在这种同步状态下需要执行的操作(例如:数据添加、删除、状态更新)。
  • 通过锁定,同步块内的处理语句可以安全执行,防止多个线程同时尝试修改同一资源时可能发生的冲突或数据不一致问题。
  • 例如,在RequestQueue的addRequest和removeRequest方法中,这些方法在队列自身的同步块内被调用,无并发问题地处理请求。

这种同步机制的良好实施是保持系统整体性能和稳定性的关键,确保操作的可预测性和一致性。在多线程编程中,同步直接关联到性能,因此有效的同步策略是必不可少的。

 

代码架构

第一次作业

该系统实现了基于多线程的多重电梯控制系统,由多个Java类组成:InputThread(输入线程)、MainClass(主类)、Process(处理线程)、Request(请求类)、RequestQueue(请求类)、Schedule(调度器)。 该架构旨在分离输入、处理和调度在电梯系统请求处理中的作用,使其在多线程环境中有效运行。 每个线程都专注于具体任务,通过共享请求队列来管理请求的流程。 

 

第二次作业

该系统涵盖了多台电梯系统的更复杂的模拟。 主要目标是完善电梯运行策略,实现高效运送旅客。 每台电梯要求具备处理多个请求(主要请求和附加请求)的能力。 电梯的选择是根据乘客的候车位置、要求时间和电梯的现状。 此外,系统应提供灵活性,使不同电梯应用不同的策略。由多个Java类组成:InputThread(输入线程)、MainClass(主类)、Process(处理线程)、Request(请求类)、RequestQueue(请求类)、ResetRequest(复位请求类),Schedule(调度器)。

 

 

第三次作业

该系统覆盖了高端功能,重点优化电梯系统性能。 特别注重如何最大限度地减少请求处理时间、等待时间和整个系统的能耗。 性能指标采用多种方法测定,可用来评价系统的整体效率。 此外,还需要灵活的系统设计,以根据不同的请求和状态做出适当的反应。由多个Java类组成:InputThread(输入线程)、MainClass(主类)、Process(处理线程)、Request(请求类)、RequestQueue(请求类)、ResetRequest(复位请求类),Schedule(调度器),NormalResetRequest(正常复位请求),DoubleCarResetRequest(双复位请求)。

 

主要难点

在第一个作业中,虽然可以执行代码,但没有得出想要的输出值,在第二个和第三个作业中,由于代码的结构不好,出现了无法执行的不良结果。

 

分析bug

因为代码本身存在很多问题,所以应该从头到尾全部修改。由于第一个作业没有修改,后面的第二个和第三个作业当然不能修改。

 

心得体会

在不熟练java语言的情况下,遵循高难度的架构设计要求,编写代码存在很大的困难。 因为中文水平不好,所以理解问题也花了很长时间,不仅不能如愿地写代码,而且结果也不完全准确。 在总共做了3个作业的过程中,再次感受到我的编码实力远远不够,成为了更加充满热情的契机。在授课过程中,也有得到应聘者一对一帮助的过程,但遗憾的是没能很好地应用他们教的提示,而且因为进度太慢,所以没能自由提问。非常感谢教授和助教不断指导结果不好、不成熟的我。

 

未来方向

我将更努力地听取理论课的设计指导,更积极地利用志愿者一对一帮助的方法,通过更多的沟通来解决问题。

...全文
108 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧