java面向对象电梯运行代码_面向对象编程总结——多线程电梯

最近的三周面向对象的作业是电梯问题。主要是对多线程编程的一种训练。主要还是对生产者——消费者模型的使用的理解。作业分成了三个阶段,第一个阶段是FIFO调度策略的电梯。第二个阶段是可捎带的电梯设计,第三个部分是多个停靠楼层不同运行速度不同的电梯的合作。

FIFO

因为第一次的作业没有性能上的要求只需要满足正确性,所以我设计了两个线程协同完成这个任务。是个标准的生产者消费者问题。输入线程向共用缓冲区中写入请求,电梯每次读出一个请求之后完成这个请求。期间不关注其他请求,电梯完成请求的动作是硬编码,是正确性的考虑。唯一的多线程问题是安全停止程序。我的策略是在读到请求结束的时候,向中间缓冲区写入end标志,电梯在buffer空的时候检查end标志来确定是否退出。

8051cfe82b0825541580e5468ea23e0c.png

第一次的程序结构非常简单,GetInput和Buffer共享缓冲区,GetInput从输入中读取内容,写入buffer然后电梯从buffer中读取指令。是简单的单生产者-单消费者问题。程序结构简单,逻辑非常简化,不易出现问题,但是电梯执行的逻辑是硬编码,所以功能十分有限,这导致之后的作业需要重写电梯类。

程序复杂度分析

a36c2771e91c488a37a3b0ea2234370e.png

程序整体的复杂程度非常低,整体代码量也比较少:

1bffeb3dc9722027dd2e5f151f5c8104.png

代码的数量统计:

43d26b544589a3e49b76198bdbcc9b08.png

523ceb597cae44f2867a8dbf3a1c1aeb.png

进程之间的协作逻辑

第一次作业的时序非常简单,输入线程得到输入,将输入写入缓冲区,电梯从缓冲区读指令,如果有指令则读取并且完成,在完成过程中不关心缓冲区中是否有其他的指令,没有指令就挂起电梯线程,在输入线程输入一个新的指令的时候被唤醒。

线程协作图

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值