软件构造-实验总结6-Lab6

软件构造-实验总结6-Lab6

实验简介

实验六是要设计一个猴子模拟器,然后加上GUI和图形化,并且使用多线程,考验多线程中冲突的解决。最后两步是需要设计较好的策略,达到更好的公平性和效率。
1.规则:
猴子每t秒生成K只,我设计的程序每只猴子都为一个单独的线程,去选择n个梯子,猴子不能有对向而行的,对向而行最终会产生“死锁”,导致不能成功通过,所以需要设计选择策略,是每只猴子都达到对岸。
2.猴子生成器
原来想的是,每t秒生成一波猴子,结果程序写的时候不好实现,只能给每个猴子存入出生时间,然后再生成的时候先sleep这些时间,最后开始运行。
3.Strategy模式
设计策略,并使用Strategy模式使得猴子可以选择策略。
下面讲下策略设计的关键点:
1)猴子不能有“死锁”,这点很重要,猴子在上梯子时就要考虑这一点,程序没有设计解锁的机制,所以在选择的时候不能跑上有对向而行的猴子的梯子。
2)No “上帝视角”
实验规则里规定猴子和梯子都没有上帝视角,不知道猴子的固有属性,这也很显然,你在一瞬间选择的时候,你也只能观察到猴子在什么位置,实验把猴子脸和屁股的差异忽略了,你也不知道猴子面向哪儿,也不知道它的速度。所以在设计的时候,设计策略时假如说你要知道,梯子上的具体方向,你只能让猴子现在旁边等一秒,然后再判断梯子上猴子的位置,才能知道这个梯子上的猴子都是朝什么方向运动。
3)多线程
实验要求使用多线程,熟悉Java的多线程,每个猴子是一个线程,main函数让每个猴子同时启动,所以会带来冲突:猴子抢梯子。所以对猴子同时做的操作需要上锁Synchronize()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值