软件构造Lab6

实验目标概述

本次实验训练学生的并行编程的基本能力,特别是 Java 多线程编程的能力。
根据一个具体需求,开发两个版本的模拟器,仔细选择保证线程安全(threadsafe)的构造策略并在代码中加以实现,通过实际数据模拟,测试程序是否是线程安全的。另外,训练学生如何在 threadsafe 和性能之间寻求较优的折中,为此计算吞吐率和公平性等性能指标,并做仿真实验。
Java 多线程编程
面向线程安全的 ADT 设计策略选择、文档化
模拟仿真实验与对比分析

实验环境配置

简要陈述你配置本次实验所需环境的过程,必要时可以给出屏幕截图。
特别是要记录配置过程中遇到的问题和困难,以及如何解决的。
没有写的配置过程。

实验过程

ADT设计方案

设计了哪些ADT、各自的属性
Monkey:
属性:产生时刻、名字、方向、速度、位置、一个梯子、过桥时间、梯子组、猴子随机选择策略、log、线程开始信号
Ladder:
属性:梯子长度、梯子序号

Monkey线程的run()的执行流程图

这里无需考虑具体采用的梯子选择策略。
while循环当梯子为空时进入,然后判断猴子过河方向,当从左往右时,猴子上体字第零个位置,反之踏板减一个位置。
判断前面是否有慢猴子,有则更改速度;否则继续前进直到过岸。

至少两种“梯子选择”策略的设计与实现方案

策略 1:优先选择没有猴子的梯子,若所有梯子上都有猴子,则优先选择没有与我对向而行的猴子的梯子;若满足该条件的梯子有很多,则随机选择;
策略 2:优先选择整体推进速度最快的梯子(没有与我对向而行的猴子、其上的猴子数量最少、梯子上离我距离最近的猴子的真实行进速度最快);

“猴子生成器”MonkeyGenerator

如何设计和实现。
开发“猴子生成器”MonkeyGenerator:每隔?秒钟同时产生? 个Monkey 对象(例如:第 0 秒生成?个 Monkey 对象,第?秒又同时产生?个 Monkey 对象,第 2?秒…),并为各只猴子生成以下属性:
名字 ID(int):按照产生的时间次序进行自然数编号,同一时刻同时生成的猴子的 ID 应有不同的编号
方向 direction(String):值随机指定,左岸到右岸(“L->R”),或者从右岸到左岸(“R->L”)
速度?:正整数,取值范围为[1, ??],??为最大可能的速度。
如果N/k不为整数,则最后一次产生的猴子个数为?%?。 随机生成数据。

如何确保threadsafe?

使用了synchronized。

系统吞吐率和公平性的度量方案

按照指导书里:
在这里插入图片描述

输出方案设计

日志
GUI
运用第三方插件windowbuilder
可视化(可选)

接下来的性能测试省略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值