我通过扩展Jmeter的AbstractJavaSamplerClient实现了我自己的Sampler。在设置测试中,我想从dir读取一堆文件并填充请求List,然后在runTest阶段与所有Threads / Sampler实例共享它。目前我使用Lock来允许单个线程在开始时访问并填充它,然后其他人不必费心去重做任务。代码如下所示:
@Override
public void setupTest(JavaSamplerContext context) {
...
MyLock.lock();
try {
// setup requests
if (MyFileList == null) {
// read the files and populate MyFileList
}
finally {
MyLock.unlock();
}
}
每次Sampler线程点击此锁定时,它都会测试是否填充了MyFileList,如果没有,它会填充,否则它将释放锁定。我为此使用了ReentrantLock。但我想知道我是否可以完全避免锁定,并在开始时有一个线程初始化阶段,然后让其他线程继续。