Multi-Thread Concurrent Programming
实验目标概述
本次实验训练学生的并行编程的基本能力,特别是 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
可视化(可选)
接下来的性能测试省略